【问题标题】:Handling Cookies while scraping with Python使用 Python 抓取时处理 Cookie
【发布时间】:2017-03-21 16:42:20
【问题描述】:

我正在尝试从大学网站上的职业页面中抓取链接,但出现此错误。

urllib.error.HTTPError:HTTP 错误 302:HTTP 服务器返回一个重定向错误,这将导致无限循环。 最后的 30x 错误消息是: 临时搬家

我认为这是因为该网站有一个会话 cookie。在做了一些阅读之后,似乎有很多方法可以解决这个问题(Requests、http.cookiejar、Selenium/PhantomJs),但我不知道如何将这些解决方案合并到我的抓取程序中。

这是我的抓取程序。它是用 Python 3.6 和 BeautifulSoup4 编写的。

from bs4 import BeautifulSoup
from urllib.request import urlopen

html = urlopen("https://jobs.fanshawec.ca/applicants/jsp/shared/search/SearchResults_css.jsp")
soup = BeautifulSoup(html, 'html.parser')
data = soup.select(".ft0 a")
ads = []

for i in data:
    link = i.get('href')
    ads.append(link)

for job in ads:
    print(job)
    print('')

当我清除浏览器中的 cookie 并手动转到我要抓取的页面 (https://jobs.fanshawec.ca/applicants/jsp/shared/search/SearchResults_css.jsp) 时,我会转到另一个页面。不过,一旦有了 cookie,我就可以直接进入我想要抓取的 SearchResults 页面。

这是 cookie:

关于如何处理这个 cookie 有什么想法吗?

【问题讨论】:

  • 它可能还需要 javascript,在这种情况下,您需要通过 selenium 之类的方式读取 HTML。

标签: python cookies beautifulsoup python-requests


【解决方案1】:

使用requests-模块:

from bs4 import BeautifulSoup
import requests

session = requests.Session()
req = session.get("https://jobs.fanshawec.ca/applicants/jsp/shared/search/SearchResults_css.jsp")
req.raise_for_status()  # omit this if you dont want an exception on a non-200 response
html = req.text
soup = BeautifulSoup(html, 'html.parser')
data = soup.select(".ft0 a")
ads = []

for i in data:
    link = i.get('href')
    ads.append(link)

for job in ads:
    print(job)
    print('')

但是,我没有得到任何输出,这可能是由于广告为空。 希望对你有帮助,

【讨论】:

    【解决方案2】:

    您尝试访问的网站可能正在测试是否存在 cookie 和 Javascript。 Python 确实提供了一个 CookieJar 库,但如果 javascript 也是必需的,这还不够。

    相反,您可以使用 Selenium 来获取 HTML。有点像现有浏览器的遥控器,可以如下使用:

    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    
    url = "https://jobs.fanshawec.ca/applicants/Central?delegateParameter=searchDelegate&actionParameter=showSearch&searchType=8192"
    
    browser = webdriver.Firefox(firefox_binary=FirefoxBinary())
    browser.get(url)
    soup = BeautifulSoup(browser.page_source, 'html.parser')
    
    data = soup.select(".ft0 a")
    ads = []
    
    for i in data:
        link = i.get('href')
        ads.append(link)
    
    for job in ads:
        print(job)
    

    (另请参阅 PhantomJS 以获得无头解决方案)

    这将为您提供如下开头的链接:

    /applicants/Central?delegateParameter=applicantPostingSearchDelegate&actionParameter=getJobDetail&rowId=174604&c=%2BWIX1RV817HeJUg7cnxxnQ%3D%3D&pageLoadIdRequestKey=1490116459459&functionalityTableName=8192&windowTimestamp=null
    /applicants/Central?delegateParameter=applicantPostingSearchDelegate&actionParameter=getJobDetail&rowId=174585&c=4E7TSRVJx7jLG39iR7HvMw%3D%3D&pageLoadIdRequestKey=1490116459459&functionalityTableName=8192&windowTimestamp=null
    /applicants/Central?delegateParameter=applicantPostingSearchDelegate&actionParameter=getJobDetail&rowId=174563&c=EyCIe7a8xt0a%2BLp4xqtzaw%3D%3D&pageLoadIdRequestKey=1490116459459&functionalityTableName=8192&windowTimestamp=null
    /applicants/Central?delegateParameter=applicantPostingSearchDelegate&actionParameter=getJobDetail&rowId=174566&c=coZCMU3091mmz%2BE7p%2BHNIg%3D%3D&pageLoadIdRequestKey=1490116459459&functionalityTableName=8192&windowTimestamp=null
    /applicants
    

    注意:要使用 Selenium,您需要install it,因为它不是默认 Python 库的一部分:

    pip install selenium
    

    【讨论】:

    • 我运行了你的代码,我得到了这些错误: FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver' 在处理上述异常的过程中,另一个异常发生了:'geckodriver'>selenium .common.exceptions.WebDriverException:消息:“geckodriver”可执行文件需要在 PATH 中。
    • 我下载了geckodriver,还是报错。
    • 我的恰好在我的 Python 文件夹中 C:\Python27\geckodriver.exe
    • 我必须将路径放在代码中吗?我尝试添加它没有成功: binary = FirefoxBinary('I put the path in here') browser = webdriver.Firefox(firefox_binary=binary)
    • 我会花更多时间阅读 Selenium 文档。感谢您的帮助。
    猜你喜欢
    • 2017-11-20
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多