我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再pop了.
最后我把代码放上去.为了突出问题我选的开始网址很特殊他没有子链接.from urllib.request import urlopenfrom bs4 import BeautifulSoupfrom urllib.request import urlopenimport reimport randombase_url = ""his = ["/item/%E9%B8%A1%E7%9F%A2%E8%97%A4/931175?fromtitle=%E9%B8%A1%E5%B1%8E%E8%97%A4&fromid=374872"]for i in range(200):url = base_url + his[-1]print (77777777)html = urlopen(url).read().decode('utf-8')print (8888888888)soup = BeautifulSoup(html, features='lxml')print (9999999)print(i, soup.find('h1').get_text(), ' url: ',base_url+ his[-1])# find valid urlssub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/item)/item/(%.{2})+$")})print ('爬到了'+str(i+1))if len(sub_urls) != 0 :his.append(random.sample(sub_urls, 1)[0]['href'])else:if len(his)==1:passelse:# no valid sub link foundhis.pop()#到底错在了哪里???为什么多跑几遍,很小概率可能会发生1.无限重复同一个url 2.死循环 3.当然也有可能无限2个url来回跳print ('666666')#已经修改好了,有错误可以继续回复我