爬虫遇到的问题:关于网页需要跳转后才能访问的问题
有时候访问一些网页,显示网页需要等待5s才能跳转到所需要的网页:Your browser will redirect to your requested content shortly;
这是为了防止是爬虫去访问,requests没有提供相应的方法,如果每次用chromedriver访问影响效率太低下;
经观察网页首次打开会出现需要等待的问题,再次刷新就不会了,那应该是设置了cookie的问题;
复制cookie跑下程序,访问结果就是想要的json数据,那就证明首次访问设置了cookie,后面就一直刷新就直接访问数据了;
复制的cookie过一段时间再访问还是会跳出需要等待5s跳转的问题,说明cookie会过期;
解决思路:
首次使用chromedriver访问获取cookie,再用request.session保持cookie更新,使用无头浏览器拿到cookie后再访问仍不OK,经排查是user-agent和chromedriver访问时的user-agent不一样,需要设置无头浏览器的user-agent,再访问就OK了,代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36') # 此处设置的user-agent要和后面每次访问的user-agent一致才不会报错
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(url)
time.sleep(10)
cookies = {}
for cookie in driver.get_cookies():
cookies[cookie['name']] = cookie['value']
print(cookies)
s = requests.Session()
s.cookies = requests.utils.cookiejar_from_dict(cookies, cookiejar=None, overwrite=True)
driver.quit()
res = s.get(url, headers=headers)
print(res)
再拿着这个url就可以去反复请求url都不会跳出需要等待5s的问题