python抓取动态网页(Python爬虫小程序,爬取*敏*感*词*网页文件,新手练手的好案例)

优采云 发布时间: 2021-09-12 17:01

  python抓取动态网页(Python爬虫小程序,爬取*敏*感*词*网页文件,新手练手的好案例)

  内容

  本文文章帮助初学者理清网络爬虫的思路。 文章 的内容并不深奥。主要是通过案例帮助大家学习爬虫程序。学习了这些基础工具之后,你的爬虫之路才刚刚开始。 文章的内容来自我博客中关于python爬虫的章节。更多内容请参考我博客的网络爬虫专栏。特别提示:转载请注明出处。

  0、crawler 介绍

  在做任何事情之前,先弄清楚你为什么要这样做,以及如何去做。

  网络爬虫简介:网络爬虫的目的,企业获取数据的方式,可以作为爬虫的编程语言,以及爬虫爬取数据的步骤

  一、静态文件捕获(响应文件中存在的数据)

  大部分数据直接写在静态文件上。这里的静态文件通常是指在一定时间内不会发生变化且不需要与后台交互的网页。

  1. 首先确认响应文件中是否存在抓取到的数据

  2.分析页面结构,观察URL地址规律

  1)查看网页元素的布局,预览整体结构,并使用控制台进行分析

  2)检查浏览网页时元素结构是否发生变化(如翻页)

  3)检查页面重定向时URL地址是否发生变化(判断是否发生请求转发或重定向),如果有,去JS代码中查找变化原因

  3.开始编写数据捕获代码

  4. 开始编写我的第一个爬虫程序

  Python爬虫入门,最简单的爬虫代码,网站如何判断是人为操作还是爬虫程序操作,对url参数中的中文参数进行编码,一个基于百度搜索的爬虫程序

  完成上述案例后,可以再做一个案例来练手。 Python爬虫小程序,爬取*敏*感*词*网页文件,新手练习的好案例。

  5.多级页面爬取思路

  以上两种情况都是抓取一级页面。一级页面是指打开一个网页,只抓取网页上的内容,而二级页面是一级页面的基础,你点击一个内容,这个内容往往是一个链接,它带你到另一个页面,这是二级页面。在做爬虫的时候,我们一般都是先下载一级页面。这个页面没有我们要爬取的数据,但是收录了网站的链接,里面存放着我们要的数据。采集完所有的链接,我们就拥有了所有的二级页面,你也拥有了所有的数据。这时候就可以去二级页面爬取数据了。有二级页面和三级页面和四级页面,但原理是一样的。

  我们来看看如何抓取二级页面的内容。

  Python爬虫,4567电影网电影信息爬取,二次页面处理方案

  二、动态文件捕获(响应文件中不存在的数据)

  这部分的数据不是存储在响应内容中,而是存储在Ajax XML文件或JS文件中,并且随着你的操作动态变化。

  1.如果你发现你想要的内容已经不在响应文件中了,那很有可能是使用ajax动态生成的

  2.F12 进入控制台抓包,刷新页面或执行某些动作,查看XHR异步加载的数据包内容

  1)GET 请求:检查Request Headers请求头,检查请求头是怎么做的,是否需要伪装请求头。

  查看查询字符串参数,查看请求参数,这些参数大多收录在URL中

  2)Post 请求:检查Request Headers请求头,检查请求头是怎么做的,是否需要伪装请求头。

  查看FormData表单数据,看post请求发送时封装了哪些数据,这些数据哪些是动态的,哪些是静态的,以及如何生成动态进一步分析(主要通过JS代码分析)

  3. 观察Form的查询参数或数据模式。如果需要进一步抓取分析处理,应该分析JS文件

  4.使用 request.get().json() 获取json数据,使用列表或字典提取数据

  三、多线程数据抓取

  1.把要爬取的网址放入队列

  需要用到的模块有:from queue import Queue

  2.多线程从队列中取出地址并调用requests模块获取文件

  需要用到的模块有:from threading import Thread

  3.进行I/O读写时注意加锁

  需要用到的模块有:from threading import Lock

  4.调用队列URL地址的两种写法

  当队列值为空时,线程如果发出请求就会被阻塞,因此需要对队列做空操作或抛出异常。

  方法一:判断队列是否为空,避免线程阻塞

  虽然为真:

  如果不是 q.empty():

  url=q.get()

  其他:

  休息

  方法二:随时间抛出异常

  试试:

  url=q.get(block=True,timeout=5)

  ....

  例外为 e:

  休息

  5.多线程争夺公共文件时的操作

  多线程写文件时不加线程锁会导致一系列问题

  方法如下:

  从线程导入锁

  lock=Lock()

  lock.acquire() #加锁

  代码块

  local.relase() #release

  案例:

  Python多线程爬虫、腾讯作业网作业爬虫、Ajax异步数据爬取模板

  四、将爬虫数据存入数据库并存入缓存的思路

  此内容将在未来添加..

  五、Python 爬虫程序常用的解析模块

  Pythoy一般用来解析带有re、lxml+xpath、json的页面模块,下面是用法

  1.re

  re用正则表达式来得到你想要的东西,核心是正则表达式怎么写

  python正则表达式re模块介绍,贪婪匹配与非贪婪匹配,案例:猫眼电影TOP100信息抽取

  2.lxml+xpath

  lxml+xpath就是写xpath,然后用lxml解析xpath进行匹配,需要知道xpath的规则(教程):

  Python常用插件,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房信息

  3.ajax/json

  JSON 一般是ajax动态数据。请求得到ajax响应内容后,会进行json化,然后进一步处理,比如存储在库中,存储在缓存中

  Python多线程爬虫、腾讯作业网作业爬取程序、Ajax异步数据爬取模板

  4.pyexecjs

  python爬虫程序的百度翻译,pyexecjs模块的使用(python中的js解析库)

  六、crawler 框架

  1.Selenium

  Selenium 不是严格意义上的框架。它不同于传统的爬虫。 Selenium 更像是一个模拟人类操作的机器人。简单的说,你打开一个网页,比如起点小说网站,里面有很多你想感兴趣的小说复制到本地。人为地做到这一点是不可能的。一部小说短则几百,长则数万。您可以一张一张地复制它。是否可以?这时候就可以写一个Selenium爬虫程序来模拟你的行为:打开网页,点击小说,打开第一章,复制第一章,关闭网页,打开第二章,复制第二章……直到最后一章。 Selenium就是在做这样的事情,而且这些操作都是可视化的(你可以看到它在做这个),这是和传统爬虫最大的区别。

  Selenium+ChromeDriver框架、Selenium介绍、百度搜索、猫眼电影、京东商城案例

  2.Scrapy 框架

  Scrapy 是目前最流行的 Python 框架。这个框架帮助我们做了很多前期工作,省去了重复写的麻烦。最重要的是为爬虫程序提供一个可行的框架,并且尽可能的去理解。耦合使团队编程成为可能。想做python爬虫,Scarpy一定要掌握。

  教程:

  Scrapy爬虫框架,入门案例(很详细),Scrapy多线程思路

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线