我得到的内容与在页面上查看来源完全不同:
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
跨度中没有“应用”,页面上没有“应用”。我可以识别我想要的唯一方法是“应用”部分
答案 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>