使用Python的Web抓取,需要登录才能查看输出

A.n*_*ous 5 mechanize beautifulsoup web-scraping python-3.x python-requests

我正在尝试输出工作的薪水,但显示需要登录才能查看。我可以成功输出其他职位的描述,例如职位,公司,工作地点等。我的问题是,如何显示需要登录才能查看的薪水?需要有人帮助我。

import requests
from bs4 import BeautifulSoup
from mechanize import Browser
import http.cookiejar as cookielib

#creates browser
br = Browser()
#browser options
br.set_handle_robots(False)  #ignore robots
br.set_handle_refresh(False) #can sometimes hang without this
br.addheaders = [('User-Agent', 'Firefox')]
login_url = "https://myjobstreet.jobstreet.com.my/home/login.php"
cj = cookielib.CookieJar()
br.set_cookiejar(cj)
response = br.open('https://myjobstreet.jobstreet.com.my/home/login.php')
#view available forms
for f in br.forms():
    print(f)
br.select_form('login')
br.set_all_readonly(False)   #allows everything to be written to
br.form['login_id'] = 'my_id'
br.form['password'] = 'my_password'
#submit current form
br.submit()

r = requests.get(url, headers=headers, auth=('user', 'pass'))
soup = BeautifulSoup(r.text, 'lxml')
jobs = soup.find_all("div", {"class": "rRow"})
for job in jobs:
    try:
        salary = job.find_all("div", {"class": "rRowLoc"})
        job_salary = salary[0].text.strip()
    except IndexError:
        pass

    print("Salary: ", job_salary)
Run Code Online (Sandbox Code Playgroud)

这是输出:

Job:  Sales Executive
Company:  Company
Location:  Earth
Salary:  Login to view salary
Run Code Online (Sandbox Code Playgroud)

预期产量:

Job:  Sales Executive
Company:  Company
Location:  Earth
Salary:  1000 
Run Code Online (Sandbox Code Playgroud)

ube*_*kel 0

该代码无法运行。我可以看到多个问题。您不使用login_url,变量urlheaders未定义。您正在实例化一个浏览器br,使用它来登录br.open,但随后您停止使用该浏览器。您应该继续使用浏览器而不是requests.get. 您的目标应该是在登录后获取 cookie,并在下一页继续使用 cookie。我不熟悉 mechanize,尽管这就是您从open.

response = br.open(url)
print(response.read())      # the text of the page
Run Code Online (Sandbox Code Playgroud)

更好的选择可能是打开开发人员工具,查看网络请求,右键单击它,然后单击“复制为 cURL”。这将向您展示如何使用 cookie 等在命令行重复请求。请参阅https://developers.google.com/web/updates/2015/05/replay-a-network-request-in-curl更好的解释以及 gif