我使用BeautifulSoup的API在Python中创建了一个网络爬虫。爬网某些站点时,网络爬虫使用相同的标头信息/用户代理。我注意到,当我在两台不同的计算机上运行相同的确切脚本(一个在笔记本电脑上,另一个在服务器上)以爬网给定站点时,它们会产生不同的结果结果。“不同的结果”是指在服务器上运行的脚本不会爬网到站点上的所有链接。
例如,如果我想对Macys.com进行爬网,则笔记本电脑上的脚本将爬网到每个部门(家庭,bedbath,妇女,男子等),而服务器上运行的脚本会错过bedbath部门。这真的使我感到困惑,因为它们都使用具有相同标头信息/用户代理的相同脚本来爬网相同的站点。我想不出其他任何可能导致这种情况的设置
这是我在python中定义用户代理并创建汤对象的方法
user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7"
hdr={'User-Agent':user_agent}
response = urlopen(Request(current_url, headers=hdr))
html = response.read()
soup = BeautifulSoup(html, "lxml")
如果您未明确指定解析器,BeautifulSoup
则会自动选择基础解析器:
如果您不指定任何内容,则将获得已安装的最佳HTML解析器。Beautiful Soup将lxml的解析器评为最佳,然后是html5lib的解析器,然后是Python的内置解析器。
这里的问题是,它会根据python环境中可用/安装的模块在本地和服务器上选择不同的解析器。并且,由于解析器之间存在差异,因此您会看到不同的结果。
明确指定适合您需求的解析器,例如:
soup = BeautifulSoup(html, "lxml")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句