爬虫抓取网页数据(用Python爬虫进行网站数据获取(I)本次(组图))
优采云 发布时间: 2021-10-24 04:05爬虫抓取网页数据(用Python爬虫进行网站数据获取(I)本次(组图))
这是一个很久以前反弹的文章。我很幸运今天能够弥补。也是因为最近才开始想明白一些事情。如果你还没有通过第一篇文章,你可以点击下面的链接来看看。本文假设大家已经掌握了python的基本语法和简单的爬虫技术。
点击跳转第一篇:网站用Python爬虫数据采集(上)
这次我们来讲解一个豆瓣爬虫,包括验证码校验和登录后简单的数据爬取。
好了,废话少说,给我看代码
首先,我们需要了解一个背景知识。登录网站实际上是向服务器提交了一些数据,包括:用户名密码、验证码等一些你看不到的数据。这部分你看不到的数据随网站而变化,但是基本套路都会收录一个类似id的数据,而且每次提交的值都不一样,前端看不到就提交.
第一步,我们查看chrome上的登录页面,观察到前面提到的一些值需要提交。
/登录
这里有一个小技巧。如果不使用fidler或charles等抓包工具直接登录,是看不到需要提交的数据的。因此,笔者估计是输入了错误的验证码进行验证。通过查看元素的登录,可以看到需要提交的数据。
如上图,可以找到其他隐藏提交信息,其中: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 的方式是一种方便,高速和高光泽的方法。