我想写一个蜘蛛来抓取一个HTML。我使用requests
和beautifulsoup
,但我发现beautifulsoup无法解析整个页面。相反,Beautifulsoup只解析了一半。
这是我的代码:
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上。
我该如何解决?
感谢
答案 0 :(得分: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)
请注意,您还可以考虑事先不对硬盘列表进行硬编码,并以更动态的方式处理分页,解析页面上的分页块并提取可用的页码。