请求模块获取的内容与页面上的内容不同

时间:2016-02-17 23:25:22

标签: python html python-2.7 python-requests

我得到的内容与在页面上查看来源完全不同:

import requests
from bs4 import BeautifulSoup

URL = "http://www.indeed.com/jobs?q=python&start=740"

r = requests.get(URL)
content = r.content
soup = BeautifulSoup(content)

"Apply with" in content

for span in spans:
    try:
        if "Apply" in span.string:
            print(span.string)
    except:
        pass

跨度中没有“应用”,页面上没有“应用”。我可以识别我想要的唯一方法是“应用”部分

enter image description here

enter image description here 如何使请求模块返回我访问页面时获得的相同html?谢谢

1 个答案:

答案 0 :(得分:1)

首先,您不能指望requests为您带来与您在浏览器开发人员工具中看到的完全相同的页面,因为requests只能检索初始HTML页面执行任何javascript,无需加载页面所需的任何其他请求 - 换句话说, requests不是浏览器

关于这个特殊情况,我实际上看到“轻松申请”而不是“申请你的确实简历”。看起来你在浏览器中登录了。

我在requests响应和浏览器中看到了这些“轻松应用”元素:

>>> import requests
>>> from bs4 import BeautifulSoup
>>> 
>>> URL = "http://www.indeed.com/jobs?q=python&start=740"
>>> 
>>> r = requests.get(URL, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"})
>>> content = r.text
>>> soup = BeautifulSoup(content, "html.parser")
>>> 
>>> for span in soup.find_all("span", class_="iaLabel"):
...     print(span.text)
... 
 Easily apply
 Easily apply
 Easily apply
 Easily apply
 Easily apply

如果你想在自动化中尽可能接近浏览器,那么,使用真正的浏览器 - 你可以通过selenium控制真实的浏览器,如Firefox或Chrome,或无头的PhantomJS。 / p>