2017-04-21 71 views
0

我想写一个蜘蛛抓取一个html。我使用requestsbeautifulsoup,但我发现美丽的脸不能分析整个页面。相反,Beautifulsoup只是解析它的一半。 这里是我的代码:Beaultifusoup无法解析所有的html

import requests 
from bs4 import BeautifulSoup as bs 
urls = ['http://www.bishefuwu.com/developer/transmit','http://www.bishefuwu.com/developer/transmit/index/p/2.html'] 
html = requests.get(urls[0]).content 
soup = bs(html,'lxml') 
table = soup.find('tbody') 
trs = table.find_all('tr') 
for tr in trs: 
    r = tr.find_all('td')[:3] 
    for i in map(lambda x:x.get_text(),r): 
     print i 

,这是the origin page,里面有行“13107”, 但我的蜘蛛只是有它的一半,我排停在“13192”。 为了测试,我手动保存requests所要求的原始HTML,我发现一切都很好。这个错误在Beautifulsoup上。 我该如何解决它? 谢谢

回答

1

不,BeautifulSoup没有什么错在这里。您正在解析http://www.bishefuwu.com/developer/transmit网址下的单个网页 - 它不包含编号为13107的行 - 它位于第二页。

遍历列表中的所有网址:

with requests.Session() as session: 
    for url in urls: 
     html = session.get(url).content 

     soup = bs(html, 'lxml') 

     for tr in soup.select("tbody tr"): 
      r = tr.find_all('td')[:3] 
      for i in map(lambda x: x.get_text(), r): 
       print(i) 

需要注意的是,你也可以认为不硬编码的URL列表事先和处理分页以更加时尚动感的解析上的分页块页面并提取可用的页码。

+0

非常感谢! – ucag