行末から改行を削除しましたか?
for line in f.readlines():
line = line.strip()
readlines()
改行\n
文字を含むファイルから取得した行のリストを生成します。
証拠url
変数を印刷することによる証拠(行の後url = line+"?page=%d" % i
):
元のコード:
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/
?ページ=1
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/
?ページ=2
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/
?ページ=3
私の提案した修正で:
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/?page=1
http://www.downloadray.com/TIFF-to-JPG_download/
http://www.downloadray.com/Moo0-Image-Thumbnailer_download/
http://www.downloadray.com/Moo0-Image-Sizer_download/
http://www.downloadray.com/Advanced-Image-Viewer-and-Converter_download/
http://www.downloadray.com/GandMIC_download/
http://www.downloadray.com/SendTo-Convert_download/
http://www.downloadray.com/PNG-To-JPG-Converter-Software_download/
http://www.downloadray.com/Graphics-Converter-Pro_download/
http://www.downloadray.com/PICtoC_download/
http://www.downloadray.com/Free-Images-Converter_download/
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/?page=2
http://www.downloadray.com/VarieDrop_download/
http://www.downloadray.com/Tinuous_download/
http://www.downloadray.com/Acme-CAD-Converter_download/
http://www.downloadray.com/AAOImageConverterandFTP_download/
http://www.downloadray.com/ImageCool-Converter_download/
http://www.downloadray.com/GeoJpeg_download/
http://www.downloadray.com/Android-Resizer-Tool_download/
http://www.downloadray.com/Scarab-Darkroom_download/
http://www.downloadray.com/Jpeg-Resizer_download/
http://www.downloadray.com/TIFF2PDF_download/
http://www.downloadray.com/windows/Photos_and_Images/Image_Convertors/?page=3
http://www.downloadray.com/JGraphite_download/
http://www.downloadray.com/Easy-PNG-to-Icon-Converter_download/
http://www.downloadray.com/JBatch-It!_download/
http://www.downloadray.com/Batch-It!-Pro_download/
http://www.downloadray.com/Batch-It!-Ultra_download/
http://www.downloadray.com/Image-to-Ico-Converter_download/
http://www.downloadray.com/PSD-To-PNG-Converter-Software_download/
http://www.downloadray.com/VectorNow_download/
http://www.downloadray.com/KeitiklImages_download/
http://www.downloadray.com/STOIK-Smart-Resizer_download/
更新:
繰り返しますが、このコードは期待どおりに実行されません。変数が変更されないため、while
ループが続行されないからです。has_more
`soup.select(...)` によって返されるリストが空の場合、これ以上リンクがないことがわかります。空かどうかは len(...) で確認できます。したがって、その部分は次のようになります。
list_of_links =soup.select("div.n_head2 a[href]")
len(list_of_links)==0 の場合:
壊す
そうしないと:
soup.select("div.n_head2 a[href]") の a の場合:
印刷 (a["href"])
g.write(a["href"]+"\n")
私は += 1
最大ページ数を超えてクエリが実行された場合、ページには利用可能な最新のページが引き続き表示されるようです。したがって、使用可能な最大ページ数が 82 で、83 ページをクエリすると、82 ページが返されます。このケースを検出するには、前のページの URL のリストを保存し、それを現在の URL のリストと比較します。
これが完全なコードです(テスト済み):
from bs4 import BeautifulSoup
import urllib
import urlparse
f = open("downloadray2.txt")
g = open("downloadray3.txt", "w")
for line in f.readlines():
line = line.strip()
i = 1
prev_urls = []
while 1:
url = line+"?page=%d" % i
print 'Examining %s' % url
pageHtml = urllib.urlopen(url)
soup = BeautifulSoup(pageHtml)
list_of_urls = soup.select("div.n_head2 a[href]")
if set(prev_urls)==set(list_of_urls):
break
else:
for a in soup.select("div.n_head2 a[href]"):
print (a["href"])
g.write(a["href"]+"\n")
i += 1
prev_urls = list_of_urls