【问题标题】:requests module gets different content than is on the pagerequests 模块获取的内容与页面上的内容不同
【发布时间】:2016-05-29 22:20:03
【问题描述】:

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

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

span 中没有“Apply”,页面上也没有“Apply with”。我可以确定我想要的唯一方法是“应用”部分

如何使请求模块返回与访问页面时相同的 html?谢谢

【问题讨论】:

    标签: python html python-2.7 python-requests


    【解决方案1】:

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

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

    我在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。

    【讨论】:

    • 这可能是真的,但对于这个特定的页面,唯一有价值的链接是“应用你的真实简历”的链接
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多