弹出窗口阻止使用 wget 从网站批量下载 pdf
Popups block bulk download of pdfs from website with wget
我想使用下面的 bash
脚本从 website 的奥地利国家图书馆 wget
下载一些免费下载的 pdf(旧报纸的副本) :
for year in {14..57}; do
for month in `seq -w 1 12`; do # -w for leading zero
for day in `seq -w 1 31`; do
wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_18$year$month$day.pdf
done
done
done
除了一些报纸的问题不可用之外,即使它们存在,我也无法下载任何问题。我会收到错误,例如 1814 年 6 月 30 日的现有问题:
http://anno.onb.ac.at/pdfs/ONB_lzg_18140630.pdf
Aufl"osen des Hostnamens anno.onb.ac.at (anno.onb.ac.at)... 193.170.112.230
Verbindungsaufbau zu anno.onb.ac.at (anno.onb.ac.at)|193.170.112.230|:80 ... verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet ... 404 Not Found
FEHLER 404: Not Found.
但是,如果您要手动下载相应的 pdf(here,请参阅右上角),则必须在弹出确认中按 "ok"。一旦你这样做了,我什至可以毫无问题地通过 wget
下载这期杂志。
我如何告诉 wget 通过命令行确认确认(一旦您想下载 pdf 就会收到的问题),请参见下面的屏幕截图? wget 中是否有相应的命令?
您的代码中有两个问题。
lgz
并非所有日期都有报纸
- PDF 并不总是在您使用的 URL 上生成和缓存。您需要先 运行 另一个 URL 以确保生成 PDF
下面是应该可以工作的更新代码
#!/bin/bash
for year in {14..57}; do
DATES=$(curl -sS "http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=18$year&zoom=33" | gawk 'match([=10=], /datum=([^&]+)/, ary) {print ary[1]}' | xargs echo)
for date in $DATES
do
echo "Downloading for $date"
curl "http://anno.onb.ac.at/cgi-content/anno_pdf.pl?aid=lzg&datum=$date" -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'DNT: 1' -H "Referer: http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=$date" -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9' --compressed
wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_$date.pdf
done
done
我想使用下面的 bash
脚本从 website 的奥地利国家图书馆 wget
下载一些免费下载的 pdf(旧报纸的副本) :
for year in {14..57}; do
for month in `seq -w 1 12`; do # -w for leading zero
for day in `seq -w 1 31`; do
wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_18$year$month$day.pdf
done
done
done
除了一些报纸的问题不可用之外,即使它们存在,我也无法下载任何问题。我会收到错误,例如 1814 年 6 月 30 日的现有问题:
http://anno.onb.ac.at/pdfs/ONB_lzg_18140630.pdf
Aufl"osen des Hostnamens anno.onb.ac.at (anno.onb.ac.at)... 193.170.112.230
Verbindungsaufbau zu anno.onb.ac.at (anno.onb.ac.at)|193.170.112.230|:80 ... verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet ... 404 Not Found
FEHLER 404: Not Found.
但是,如果您要手动下载相应的 pdf(here,请参阅右上角),则必须在弹出确认中按 "ok"。一旦你这样做了,我什至可以毫无问题地通过 wget
下载这期杂志。
我如何告诉 wget 通过命令行确认确认(一旦您想下载 pdf 就会收到的问题),请参见下面的屏幕截图? wget 中是否有相应的命令?
您的代码中有两个问题。
lgz
并非所有日期都有报纸- PDF 并不总是在您使用的 URL 上生成和缓存。您需要先 运行 另一个 URL 以确保生成 PDF
下面是应该可以工作的更新代码
#!/bin/bash
for year in {14..57}; do
DATES=$(curl -sS "http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=18$year&zoom=33" | gawk 'match([=10=], /datum=([^&]+)/, ary) {print ary[1]}' | xargs echo)
for date in $DATES
do
echo "Downloading for $date"
curl "http://anno.onb.ac.at/cgi-content/anno_pdf.pl?aid=lzg&datum=$date" -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'DNT: 1' -H "Referer: http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=$date" -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9' --compressed
wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_$date.pdf
done
done