python爬虫网站数据_技术分享 | 用Python爬虫进行网站数据获取(II)

这是一篇许久之前跳票的文章,有幸在今天能够补上,也得益于最近开始想通一些事情。如果没过第一篇的可以点击下面的链接先看看,本文默认大家已掌握python的基本语法及简单的爬虫技术。

本次我们将讲解一个登陆douban的爬虫,包括验证码验证,以及登陆后进行简单数据爬取。

好了,事不宜迟,show me the code

首先我们需要了解一个背景知识,登陆网站,其实是提交一些数据给到服务器,包括:用户名和密码,验证码,以及其他你看不到的数据。看不到的这部分数据因网站不同而异,但基本的套路会包含一个类似于id的数据,而且每次提交的值都不同,且在前端看不到的情况下进行提交。

第一步,我们在chrome上看一下登陆的页面,以及观察发现出一些前面讲到的需要提交值。https://www.douban.com/login

这里有个小技巧,不借助fidler或者charles等抓包工具,直接登陆的话,看不到需要提交的数据。所以笔者估计输入错误的验证码进行验证。通过审查元素的login,就能看到需要提交的数据。

如上图,可以发现其他隐藏的提交信息,其中:captcha-solution为验证码,captcha-id为隐藏的id值。

第二步,找到隐藏id和验证码提交。

解决验证码提交的问题。主流的方法有两个,一是手动输入,适用于新手且复杂程度并发量很低的爬虫,我们介绍的是这种;二是利用ocr图像识别技术,训练数据后在一定的准确率下进行判断,这种方法比较重,不适合初学者,有兴趣的童鞋可以自己试试。

手动输入,首先我们要看到验证码,然后再输入。采用的方法是将验证码图片下载到本地,使用时到对应的路径去打开图片后输入,然后进行登陆表单的提交。

通过观察我们可以发现验证码图片都存储这个路径下,所以在解析页面后找到这个路径后就可以下载这个图片了。

隐藏id的获取比较简单在源代码下找到对应的id,然后动态的赋值到提交表单上即可。

#coding=utf-8

#没有上面这行输入中文会报错,注意

import requests

from lxml import html

import os

import re

import urllib.request

login_url ="https://www.douban.com/login"

s = requests.session()

r = s.get(login_url)

tree = html.fromstring(r.text)

el = tree.xpath('//input[@name="captcha-id"]')[0]

captcha_id = el.attrib['value']

#获取隐藏id

el2 = tree.xpath('//img[@id="captcha_image"]')[0]

captcha_image_url = el2.attrib['src']

imgPath = r'E:\img'

res=urllib.request.urlopen(captcha_image_url)

filename=os.path.join(imgPath,"1"+'.jpg')

with open(filename,'wb') as f:

f.write(res.read())

#保存验证码图片

captcha_solution= input('请输入验证码:')

第三步,表单提交。

表单与第一步观察得出的值一致。

运行结果如下:

好了,到这里这个爬虫也就完成了。预告下下一篇的内容,其实很多人都已经发现了api的数据获取才是比较方便且稳定的做法,通过页面爬虫的做法,一来网页结构会变,二来还需要和对方的反爬虫机制斗智斗勇。利用api的方式反而是一种便捷高速且高光正的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值