2019-02-27

爬虫遇到的问题:关于网页需要跳转后才能访问的问题

有时候访问一些网页,显示网页需要等待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的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • selenium+python配置chrome浏览器的选项 1. 背景 在使用selenium浏览器渲染技术,爬取...
    朝畫夕拾阅读 9,062评论 0 5
  • MySQL 死锁 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无...
    Impossible安徒生阅读 323评论 0 0
  • 1、安装 官网下载源码:http://www.redis.cn/[http://www.redis.cn/]htt...
    晨曦_zdq阅读 3,094评论 0 0
  • 今天学习了扫除我们心地的灰尘,主讲了三颗心,即恭敬心,感恩心和精进心!所以在以后的生活与工作中我们要谦虚谨慎,扫除...
    陈梦尧阅读 576评论 0 0
  • 上午去了农场,把建材给了秋爹,他蛮高兴的,应该有不少东西能用得上。 去了谭良师傅家,把除草播种的事情交代了给他们两...
    小贴士阅读 282评论 0 0