我试图从大学网站的职业页面上抓取链接,我收到了这个错误。
urllib.error.HTTPError:HTTP错误302:HTTP服务器返回了导致无限循环的重定向错误。 最后30x错误消息是: 暂时移动
我认为这是因为该网站有会话cookie。在做了一些阅读之后,似乎有很多方法可以解决这个问题(请求,http.cookiejar,Selenium / PhantomJs),但我不知道如何将这些解决方案纳入我的抓取程序。
这是我的抓手计划。它是使用BeautifulSoup4在Python 3.6中编写的。
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的任何想法?
答案 0 :(得分: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('')
但是,我没有得到任何输出,这可能是由于广告是空的。 我希望这会对你有所帮助,
答案 1 :(得分:0)
您尝试访问的网站可能正在测试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