我使用BeautifulSoup的API在Python中创建了一个webcrawler。在抓取某些网站时,webcrawler使用相同的标头信息/用户代理。我注意到,当我在两台不同的计算机上运行相同的脚本(我的笔记本电脑上的一个和服务器上的另一个)来抓取给定的网站时,它们会产生不同的结果。通过"不同的结果,"我的意思是在服务器上运行的脚本不会爬网到站点上的所有链接。
例如,如果我想抓取Macys.com,我的笔记本电脑上的脚本将爬到每个部门(家庭,卧铺,女性,男士等),而服务器上运行的脚本会错过卧床部门。这真让我感到困惑,因为他们都使用相同的脚本信息/用户代理相同的脚本来抓取同一个站点。我想不出可能导致这个
的任何其他设置以下是我在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")
答案 0 :(得分:2)
如果您未明确指定解析器,BeautifulSoup
will pick up the underlying parser automatically:
如果您没有指定任何内容,您将获得最佳的HTML解析器 安装。然后,Beautiful Soup将lxml的解析器列为最佳解析器 html5lib,然后是Python的内置解析器。
这里的问题是它在本地和服务器上选择不同的解析器,具体取决于python环境中可用/安装的模块。而且,由于有differences between parsers,您会看到不同的结果。
明确指定适合您需求的解析器,例如:
soup = BeautifulSoup(html, "lxml")