一、下载文件和图片
Scrapy中有两个类用于专门下载文件和图片,FilesPipeline和ImagesPipeline,其本质就是一个专门的下载器,其使用的方式就是将文件或图片的url传给它(eg:item[“file_urls”])。使用之前需要在settings.py文件中对其进行声明其导入路径,并且置于其他ItemPipeline之前。
二、模拟用户登录
有许多网站带有登录功能,并且有的网站必须登录了才能获取信息,故可以利用Scrapy来模拟用户登录的行为,进而自动化获取网页信息。登录实质是向服务器发送含有登录表单数据的HTTP请求。在Scrapy中有一个继承Request基类的FormRequest类,这个类可以帮助我们模拟用户登录的行为。其中最为简单的方式是(将需要登录的信息提前以发送请求的格式设定好,直接使用FormRequest的from_response方法就可以实现):
Fd={“number_phone”:******************,”password”:12334455}
Request=FormRequest.from_response(response,formdata=fd)
在实际应用中,一般将登录和爬取内容进行分开实现,保证逻辑为登录成功后,再爬取网页内容。
除了登录的网页外,网页中可能会出现识别验证码的情况,其设置的目的是为了防止爬虫爬取,故要求用户登录输入验证码。识别验证码的方法有很多,以下是常规的方法:
①OCR识别:tesseract-ocr是基于OCR实现的一个验证码识别库,再Python中可以通过第三方库pytesseract进行调用。由于是第三方库故需要对其进行安装下载,,pip install tesseract-ocr,由于其依赖其他的图像处理库,故还需要安装pip install pillow pytesseract
一般这种的识别率不是很高,多在70%~80%之间,且用于识别较为简单的验证码,
②购买服务:对于复杂的验证码其识别较为困难,可以通过借助一些网站实现验证码识别服务(大概为1元钱识别100个验证码),并且这些平台提供HTTP服务接口,用户可以通过HTTP请求将验证码图片发送给平台,平台识别后将结果通过HTTP响应返回。类似的这类平台有阿里云市场上有很多这类服务的识别平台。
③人工识别验证码:在Scrapy下载完验证码图片后,调用image.show()方法将其显示出来,然后调用Python内置函数input,将人工识别的结果进行输入即可。
④利用浏览器的cookie:在使用浏览器登录网站后,包含用户身份信息的Cookie会被浏览器保存在本地,如果Scrapy爬虫能直接使用浏览器中的Cookie发送 HTTP请求,就可以绕过提交表单登录的过程。这个过程需要一直持续到人工登录网站后进行爬取操作。如何获取cookie,在python中直接进行pip install browsercookie即可进行导入并查看浏览器的cookie,使用方法:
Import browsercookie
Cookies=browsercookie.chrome()/firefox()即可
通过浏览器的cookie可以直接进行使用,将BrowserCookieMiddleware源码将其复制到middlewares.py中,并在配置文件中添加如下信息即可,直接使用cookie登录网站进行数据爬取。
USER_agent=” ”
DOWNLOADER_MIDDLEWARES={
“scrapy.downloadermiddlewares.cookie.CookieMiddleware”:None,
“browser_cookie.middlewares.BrowserCookieMiddleware”:701,
}通过这种方式就可以直接利用一个伪装好的用户代理来实现利用cookie对直接进行网站登录对其进行信息爬取。