其实用selenium爬取数据一般都是比较慢的,一般都会考虑到速度问题,会休眠很长时间,但是某些网站还是会禁止这样的爬虫访问,所以爬取某个网站的时候,发现网站被cloudflare保护起来了,需要认证才行,而且随便用了seleniumbase这个库,发现不行的,加上UC=True也不行,所以这边考虑用其他的方式来做。
在StackOverflow发现了一种方式,能处置当前的情况
https://stackoverflow.com/questions/67762186/user-profile-on-edge-using-selenium-python
https://stackoverflow.com/questions/71238056/msedge-failed-to-start-crashed-chrome-not-reachable
这样的方式可行的reason,和爬虫的特点相关,首先Selenium是使用edge的driver来打开浏览器的,但是爬虫下载的edge driver浏览器,爬取时访问网址保存的数据是在安装库里面,也就是和平时用的浏览器存放数据的地方不相同。所以就出现了问题的,平时用的浏览器存放数据的地方在C:\Users\10696\AppData\Local\Microsoft\Edge\User Data,但是爬虫用的浏览器存放数据的地方不在这里的,在其他地方的。
所以网站反爬的时候,可以通过存放数据的文件夹,看看浏览记录,看看收藏夹,看看历史记录和时间轴,看看是不是一直访问这个网站,但是没有访问过其他网站,若是通过存放数据的文件夹,发现一直访问这个网站,但是没有访问其他网站,可能就会被当作爬虫。
所以上面的方式,就是指定爬虫存放数据的目录,指定到平时浏览器存放数据的地方。平时浏览器存放数据的目录,包括了cookie,历史记录,浏览记录,收藏夹,用户信息等各种各样的内容。
指定目录以后,爬虫浏览器就可以访问平时浏览器的各种文件,可以正常显示收藏夹,历史记录,访问记录,标签页等各种信息,反爬机制也认不出来了的,反爬机制也会将这个当作正常的浏览过程。而且指定目录以后,若是平时的浏览器已经缓存了cookie,就不需要再次登录了的。
平时浏览器存放数据的地方:C:\Users\10696\AppData\Local\Microsoft\Edge\User Data
指定浏览器存放数据的方式:
service = Service(executable_path=driverpath)
edge_options = EdgeOptions()
userDataDir =r'''C:\Users\10696\AppData\Local\Microsoft\Edge\User Data'''
edge_options.add_argument(f"--user-data-dir={userDataDir}")
driver = webdriver.Edge(options=edge_options, service = service)
指定目录的时候,浏览器最好只有一个用户,若是有多个用户,还需要指定相应的用户才行,指定用户的方式就是指定用户存放数据的具体的文件夹,一般只有一个用户的话,是不需要指定的,而且指定了,可能后续还需要删除,因指定会自动产生用户文件夹。
不指定的话,默认的就是浏览器存放数据的根目录,指定的话会产生子文件夹,只能通过浏览器设置来删除 指定以后自动产生的用户文件夹,手动在文件夹中删除不起作用。
指定用户的方式,一般不需要指定,而且指定了还会自动产生子文件夹,比较繁琐的,所以默认注释掉
# profileDir = r'''C:\Users\10696\AppData\Local\Microsoft\Edge\User Data\Profile2'''# edge_options.add_argument(f"--profile-directory=")
虽然某些数据需要爬取,但是爬虫的速度当然是越慢越好,而且深夜爬虫也能减轻对服务器的pressure。
爬取速度过快还是可能被反爬的,所以休眠时间长点最好,几十秒几百秒几分钟的。
https://stackoverflow.com/questions/74188360/selenium-cloudflare-colab-and-json
https://stackoverflow.com/questions/78077400/scraping-webpage-using-selenium
版权归原作者 九是否随机的称呼 所有, 如有侵权,请联系我们删除。