我想扫描论坛中的特定链接。所有链接如下所示:http://www.vbulletinxyz-forum.tld/forum/showthread.php?t=17590
。只有链接末尾的线程号会更改。
当前,我正在使用以下代码,但它仅适用于一个特定的URL,不适用于论坛的所有线程。我该如何更改代码以使其扫描所有线程?
import urllib
mypath = "http://vbulletin-forumxyz.tld/forum/showthread.php?t=1"
mylines = urllib.urlopen(mypath).readlines()
for item in mylines:
if "http://specific.tld" in item:
print item[item.index("http://specific.tld"):]
答案 0 :(得分:1)
(1)易于实现,但可能并非所有线程号(t)都存在。因此,会有很多404请求。
(2)看一下scrapy
update(1):原则上可以这样做。请注意,a)您提供的网址无法访问(虚拟),因此我没有对其进行测试,b)其python 3.X
import urllib.request
import time
def mypath(t):
return "http://vbulletin-forumxyz.tld/forum/showthread.php?t={}".format(t)
for t in range(2):
conn = urllib.request.urlopen(mypath(t))
# check status code
if conn.getcode() != 200:
continue
mylines = conn.read().decode('utf-8').splitlines()
for item in mylines:
if "http://specific.tld" in item:
print(item)
# avoid fetching to fast (you might get banned otherwise)
time.sleep(0.5)
答案 1 :(得分:0)
这是它的工作方式,并检查0到400,000之间的线程。
import urllib.request
import time
import codecs
def mypath(t):
return "http://www.someforum.org/forum/showthread.php?t={}".format(t)
for t in range(0,400000):
conn = urllib.request.urlopen(mypath(t))
# check status code
if conn.getcode() != 200:
continue
mylines = conn.read().decode('windows-1251').splitlines()
for item in mylines:
if "http://someurl.tld" in item:
print(item)
# avoid fetching to fast (you might get banned otherwise)
# time.sleep(0.5)