Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Webcrawling脚本在两台不同的机器上产生不同的结果_Python_Web Scraping_Beautifulsoup_Html Parsing_Web Crawler - Fatal编程技术网

Python Webcrawling脚本在两台不同的机器上产生不同的结果

Python Webcrawling脚本在两台不同的机器上产生不同的结果,python,web-scraping,beautifulsoup,html-parsing,web-crawler,Python,Web Scraping,Beautifulsoup,Html Parsing,Web Crawler,我使用BeautifulSoup的API在Python中创建了一个webcrawler。webcrawler在对某些站点进行爬网时使用相同的标题信息/用户代理。我注意到,当我在两台不同的机器上运行相同的脚本(一台在笔记本电脑上,另一台在服务器上)对给定站点进行爬网时,它们会产生不同的结果。通过“不同的结果”,我的意思是服务器上运行的脚本不会爬网到站点上的所有链接 例如,如果我想爬网Macys.com,笔记本电脑上的脚本将爬网到每个部门(家庭、卧室、女性、男性等),而服务器上运行的脚本将错过卧室部

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

例如,如果我想爬网Macys.com,笔记本电脑上的脚本将爬网到每个部门(家庭、卧室、女性、男性等),而服务器上运行的脚本将错过卧室部门。这让我很困惑,因为他们都使用相同的脚本和相同的头信息/用户代理来抓取相同的站点。我想不出还有什么其他环境会导致这种情况

下面是我如何用python定义我的用户代理并创建一个soup对象

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")

如果未明确指定解析器,
beautifulsou

如果不指定任何内容,您将得到最好的HTML解析器 安装。那么,BeautifulSoup将lxml的解析器列为最佳解析器 html5lib,然后是Python的内置解析器

这里的问题是,它根据python环境中可用/安装的模块在本地和服务器上选择不同的解析器。而且,因为有,你会看到不同的结果

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

soup = BeautifulSoup(html, "lxml")

您是否总是明确指定解析器(在本例中是
lxml
)?您是否在本地和服务器上都安装了
lxml
?谢谢。你在两台机器上得到的html是一样的吗?@Isaac,不,html确实是一样的different@alecxe,在比较过程中,我让两个脚本都使用默认的html解析器,如果我正确理解了这一点,那么在我没有指定要使用的显式解析器时,服务器上运行的脚本可能使用了与我笔记本电脑上不同的解析器?@lollerskates这正是我想要解释的。请检查。嘿,alec,我检查了服务器上运行的脚本正在使用的解析器。它正在运行“html.parser”,这就是为什么会产生不同的结果。谢谢