Scrapy入门(三)

本文介绍Scrapy模拟用户登陆,阐述HTML表单元素对Http请求的影响,以爬取特定网站个人信息为例讲解。还提及验证码识别,介绍OCR技术及tesseract-ocr库,重点说明python中pytesseract库在windows下的安装步骤,最后表示模拟登陆后续待完善。

Scrapy模拟用户登陆

一般情况下,用户登陆都会使用HTML的<form>元素,每次提交表单后,浏览器会根据<form>元素的内容发送一个Http请求给服务器,其中

  • <form>的method属性决定了Http请求的方法(get/post)
  • <form>的action属性决定了Http请求的url(‘#’代表当前页面)
  • <form>的enctype属性决定了表单数据的编码类型
  • <form><input>元素决定了表单的内容
实例讲解

下面以实例讲解爬取http://example.webscraping.com中的个人信息。
在生成好的项目中实现spider

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request, FormRequest

class LoginSpider(scrapy.Spider):
    name = 'login'
    allowed_domains = ['example.webscraping.com']
    # 起始url
    start_urls = ['http://example.webscraping.com/places/default/user/profile?_next=/places/default/index']
    # 解析下载的页面,提取数据
    def parse(self, response):
        keys = response.css('table label::text').re('(.+):')
        values = response.css('table td.w2p_fw::text').extract()
        yield dict(zip(keys, values))
        pass
    # 登陆
    login_url = 'http://example.webscraping.com/places/default/user/login?_next=/places/default/index/'
    # 登陆页面的Url
    def start_requests(self):
        yield Request(self.login_url, callback= self.login)
        pass
    # 登陆页面的解析函数,构造FormRequest对象提交表单
    def login(self, response):
        fd = {'email': '760030764@qq.com', 'password' : '123456'}
        yield FormRequest.from_response(response, formdata=fd, callback = self.parse_login)
        pass
    # 登陆成功后,继续爬取start_urls中的内容
    def parse_login(self, response):
        yield from super().start_requests()

注意, 上面的代码需要在python3上跑,python2不可以

验证码识别

OCR识别

OCR是光学字符识别的缩写,用于在图像中提取文本信息。tesseract-ocr是利用这项技术实现的验证码识别库,python中为pytesseract。

pytesseract库安装

在windows下,登陆https://digi.bib.uni-mannheim.de/tesseract/下载最新版本的tesseract,并安装在任意位置。安装完成后设置环境变量。
假设安装地址为:D:\install\Tesseract-OCR
在系统path中添加:D:\install\Tesseract-OCR
系统环境变量中,添加变量TESSDATA_PREFIX,变量值为D:\install\Tesseract-OCR\tessdata
启动Anaconda Prompt安装相应的库
conda install pillow // tesseract依赖的库
pip install pytesseract

以上都完成了,写一个程序跑一下
graph

#coding=utf-8
from PIL import Image
import pytesseract

img = Image.open('./graph.jpg')
s = pytesseract.image_to_string(img)
print(s)

查看结果140378
至此pytesseract库安装完成。

上一篇:Scrapy入门(二)
下一篇:Scrapy入门(三)
模拟登陆,留坑待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值