Alan Hou的个人博客

【Python开发】利用Scrapy开发爬虫二

最近在进行爬虫技术的重新学习,本文是对【Python开发】利用Scrapy开发爬虫的补充。

Chrome Driver 下载地址:http://chromedriver.chromium.org/

国内镜像站:https://registry.npmmirror.com/binary.html

Mac 解决权限问题:拷贝到Python 环境的 bin 目录下并在该目录执行命令xattr -d com.apple.quarantine chromedriver

Chrome 启动参数完整列表:https://peter.sh/experiments/chromium-command-line-switches/#load-extension

查看常用 Chrome 页面:chrome://about/

Cookies 实现内容抓取

在进行 Selenium 模拟登录后,可存储 Cookie 并再下一次访问时直接调取 Cookie 进行内存爬取。

更新贴出完整代码(系统 macOS):

使用 debug 模式启动浏览器后可访问http://127.0.0.1:9000/json进行验证,注意应关闭已打开的浏览器之后再启动

为能正常使用 Cookie,需在 settings.py 中进行配置

上面这一小段知乎登录的代码还有一些优化空间,中英文验证码都跑通了,为便于阅读源码和使用拆分为了几个方法,在编写过程中我自己的 macOS 对于 PyUserInput的支持似乎发生过变化,发现并不能进行模拟点击操作,后来测试 pynput 等开源的包在执行时都未能达到效果。

最终还是使用selenium自带的ActionChains来进行偏移实现对中文倒立文字的点击,以及双击避免在预填内容之后的重复输入。这样反倒不用在计算时加上浏览器导航以及 macOS 顶部菜单的距离。以上保留了PyUserInput和导航计算相关的代码,或许在其他的电脑上仍可以使用。

无头模式

知乎文字倒立识别

https://github.com/muchrooms/zheye

下载将zheye放到项目目录下,并安装依赖

代码参见以上chinese_captcha部分

常见问题

1、fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached

这个问题的解决方案有很多,比如直接下载文件并指定该文件目录(如/home/alan/):

或直接下载该文件命名为fake_useragent_版本号.json(如fake_useragent_0.1.11.json)到临时目录中(临时目录可通过Python 的内置命令tempfile.gettempdir()进行获取),这样也就无需再指定 path 参数

对于第二种方法,我们还可以编写一段代码直接在自定义Middleware初始化时自动为我们完成下载工作:

值得一提的是,在 macOS 下操作时可能会出现报错

此时执行如下命令再运行即可(其中的3.6可根据具体的版本进行修改)

其实质是对certifi包进行了安装升级,因此类似下面的命令也可达到相同的效果

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)

2、Chrome version must be between 70 and 73

chromedriver 与本地 Chrome 版本不符,请升级 Chrome 或下载相对应的 chromedriver 版本

下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

并将chromedriver文件放到对应的 Python bin 目录下

3、AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’

 

退出移动版