【问题标题】:Webcrawling script producing different results on two different machines网络爬虫脚本在两台不同的机器上产生不同的结果
【发布时间】:2014-11-22 23:05:12
【问题描述】:

我使用 BeautifulSoup 的 API 在 Python 中创建了一个网络爬虫。网络爬虫在爬取某些站点时使用相同的标头信息/用户代理。我注意到,当我在两台不同的机器上运行相同的脚本(一个在我的笔记本电脑上,另一个在服务器上)来爬取给定的站点时,它们会产生不同的结果。 “不同的结果”是指在服务器上运行的脚本不会爬到站点上的所有链接。

例如,如果我想爬取 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")

【问题讨论】:

  • 您是否总是明确指定解析器(在本例中为lxml)?您是否在本地和服务器上都安装了lxml?谢谢。
  • 你在两台机器上得到的html是一样的吗?
  • @Isaac,不,html 确实不同
  • @alecxe,在比较过程中,我让两个脚本都使用默认的 html 解析器

标签: python web-scraping beautifulsoup html-parsing web-crawler


【解决方案1】:

如果你没有明确指定解析器,BeautifulSoupwill pick up the underlying parser automatically:

如果您不指定任何内容,您将获得最好的 HTML 解析器 安装。 Beautiful Soup 将 lxml 的解析器评为最佳,然后 html5lib 的,然后是 Python 的内置解析器。

这里的问题是它在本地和服务器上选择不同的解析器,具体取决于 python 环境中可用/安装的模块。而且,由于有differences between parsers,您会看到不同的结果。

明确指定符合您需求的解析器​​,例如:

soup = BeautifulSoup(html, "lxml")

【讨论】:

  • 所以如果我理解正确,当我没有指定要使用的显式解析器时,服务器上运行的脚本可能使用的解析器可能与我笔记本电脑上的解析器不同?
  • @lollerskates 这正是我想要解释的。请检查。
  • 嘿,alec 我检查了服务器上运行的脚本正在使用的解析器。它正在运行“html.parser”,这就是产生不同结果的原因。谢谢!
猜你喜欢
  • 2016-10-05
  • 2018-03-27
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多