python - requests 模块获取的内容与页面上的内容不同

标签 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?谢谢

最佳答案

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

关于这个特殊案例,我实际上看到的是“轻松申请”而不是“使用您的 Indeed 简历申请”。您似乎已在浏览器中登录 Indeed。

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

>>> 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,或 headless PhantomJS。 .

关于python - requests 模块获取的内容与页面上的内容不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35469803/

相关文章:

python - 根据使用正则表达式获得的另一列上的匹配替换列上的值 (Python Pandas)

html - 使整个页面可扩展

django - 如何解码 token 并获取djangorestframework-jwt包的信息为Django

python - 如何有效地从字典列表中过滤数据

css - 使父 div 阻止内部元素被选中

python - 在子类python中调用基类方法

Python 定时器冷却示例

Python登录多个模块输出两次

python - 将 pandas 数据框的子集转置为多索引数据框

jquery - 使用 Jquery 对不同 ID 进行加法乘法