网页数据抓取软件(没过第一篇的基本语法及简单的爬虫技术)

优采云 发布时间: 2021-09-11 00:12

  网页数据抓取软件(没过第一篇的基本语法及简单的爬虫技术)

  这是很久以前反弹的文章。我很幸运今天能够弥补。也是因为最近才开始想明白一些事情。如果你还没有通过第一篇文章,你可以点击下面的链接来看看。本文假设大家已经掌握了python的基本语法和简单的爬虫技术。

  这次我们来讲解一个豆瓣爬虫,包括验证码验证和登录后简单的数据爬取。

  好的,废话不多说,给我看代码

  首先我们需要了解一个背景知识,登录网站,其实就是向服务器提交一些数据,包括:用户名密码,验证码,以及其他你看不到的数据。这部分你看不到的数据随着网站而变化,但是基本套路都会收录一个类似id的数据,而且每次提交的值都不一样,提交是前端无法执行的看看吧。

  第一步,我们在chrome上查看登录页面,观察前面提到的一些值需要提交。

  这里有一个小技巧。如果不使用fidler或charles等抓包工具直接登录,是看不到需要提交的数据的。因此,笔者估计是输入了错误的验证码进行验证。通过查看元素的登录,可以看到需要提交的数据。

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

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

  解决验证码提交问题。主流方法有两种。一种是手动输入,适合低复杂度、低并发的新手爬虫。这就是我们介绍的;另一种是利用ocr图像识别技术,以一定的准确率训练数据。判断,这种方法比较重,不适合初学者。有兴趣的小朋友可以自行尝试。

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

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

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

  #coding=utf-8

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

  导入请求

  从 lxml 导入 html

  导入操作系统

  重新导入

  导入 urllib.request

  login_url =""

  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 的使用方式是一种便捷、高速、高雅的方式。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线