Python requests.get和urllib.urlopen向浏览器返回不同的HTML

Python requests.get和urllib.urlopen向浏览器返回不同的HTML,python,web-scraping,python-requests,screen-scraping,urllib,Python,Web Scraping,Python Requests,Screen Scraping,Urllib,我相信这是一个非常常见的问题,但我只是想了解发生了什么,这样我才能学到东西 问题:运行urllib.urlopen和requests.get都会将不同的HTML返回到浏览器中返回的内容。我禁用了Javascript,以防它通过AJAX或其他方式运行,但问题仍然存在。我还检查了开发人员工具的XHR调用或其他功能,但没有发现任何东西 Python代码: headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9

我相信这是一个非常常见的问题,但我只是想了解发生了什么,这样我才能学到东西

问题:运行urllib.urlopen和requests.get都会将不同的HTML返回到浏览器中返回的内容。我禁用了Javascript,以防它通过AJAX或其他方式运行,但问题仍然存在。我还检查了开发人员工具的XHR调用或其他功能,但没有发现任何东西

Python代码:

headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'en-GB,en-US;q=0.8,en;q=0.6',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'tgaLiveAssistantVisible=false; ASP.NET_SessionId=c5wxbmboygytpn20gubpbh0o; .ASPXANONYMOUS=lLuVr11J1Tbq9zbQPk-ZpOFMQQ4gOlePIJpfGJwAnsFNV-1gUyvJpfb2ubnIPGZg8dQnlygyrKDj1KGf14vUehOx6Iwolslm0NZZkVbfdRvv9nBZhrmAiC-2MQijnBlmZPwinqBVVVrmBmVQavyOqUVzKWr8qapeBUO4nHWgzEy_1MqPx2njtCs0DvZ3IUdz0; __utmt=1; __utma=185625580.34928295.1483869478.1484065473.1484068673.4; __utmb=185625580.17.10.1484068673; __utmc=185625580; __utmz=185625580.1484065473.3.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)',
'Host':'training.gov.au',
'Upgrade-Insecure-Requests':'1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
}
# Load the RTO page
r = urllib.urlopen('https://training.gov.au/Organisation/Details/45001')
# r = requests.get('https://training.gov.au/Organisation/Details/45001', headers=headers)
soup = BeautifulSoup(r.read(),"html.parser")
print(soup)
在HTML的底部返回:

<div class="display-row">
<div class="display-label">ABN:</div>
<div class="display-field-no-width">
</div>
</div>
</div>
<div class="display-row">
<div class="display-label">ABN:</div>
<div class="display-field-no-width">
<a href="http://www.abr.business.gov.au/search.aspx?SearchText=90608470113"title="View organisation on ABN Lookup"rel="external">90 608 470 113
<span class="accessibilityOnly">(external link)</span>
<img src="/Content/images/openNewWindow.png" alt=""/>
</a>
</div>
</div>
返回HTML:

<div class="display-row">
<div class="display-label">ABN:</div>
<div class="display-field-no-width">
</div>
</div>
</div>
<div class="display-row">
<div class="display-label">ABN:</div>
<div class="display-field-no-width">
<a href="http://www.abr.business.gov.au/search.aspx?SearchText=90608470113"title="View organisation on ABN Lookup"rel="external">90 608 470 113
<span class="accessibilityOnly">(external link)</span>
<img src="/Content/images/openNewWindow.png" alt=""/>
</a>
</div>
</div>

荷兰银行:

有人能解释一下为什么会发生这种情况吗?

服务器可能会根据您的浏览器类型给出不同的响应。如果希望获得与浏览器相同的响应,可以查看selenium python绑定。

使用请求:

import requests

url = 'https://training.gov.au/Organisation/Details/45001'
r = requests.get(url).text
输出:


荷兰银行:

requests.get(url).content
返回您在浏览器中看到的内容。content仍然返回:ABN:您是从浏览器还是从python运行的输出?对于我来说,使用requests.get(url).text仍在输出空的s@user2620825from pythonurl=''r=requests.get(url).text print(repr(r))给了我ABN,但是一旦我添加了soup=BeautifulSoup(r,“html.parser”)print(soup),我就得到了我的首字母output@user2620825使用lxml作为解析器。