Python网络爬虫数据抓取思路,静态与动态页面爬取思路,爬虫框架等

目录

0、爬虫介绍

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

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

三、多线程数据抓取

四、爬虫数据存数据库,存缓存的思路

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

六、爬虫框架


 

该篇文章有助于初学者理清网络爬虫的思路,文章内容并不深奥,主要以案例的形式帮助大家学习爬虫程序,学会这些基本的工具后,你的爬虫之路才刚刚开始。文章内容均来源于我博客里有关python爬虫的篇章,更多的内容可以参考我博客里网络爬虫这个分栏。特别注意:如果要转载请注明出处。

 

0、爬虫介绍

做任何一件事情之前先搞清楚你为什么要做,可以通过什么方式去做。

网络爬虫入门:网络爬虫的目的,企业获取数据的方式,可以用于做爬虫的程序语言,爬虫爬取数据的步骤

 

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

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

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请求头,查看请求头是如何做的,是否需要伪装请求头。

                           查看Query String Paramters,查看请求参数,这些参数多包含在URL中

   2)Post请求:查看Request Headers请求头,查看请求头是如何做的,是否需要伪装请求头。

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

3.观察查询参数或者Form表单数据规律,如果需要进行进一步抓包分析处理,应当去分析JS文件

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

 

三、多线程数据抓取

1.将待爬取的URL放入队列中

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

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

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

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

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

4.调取队列url地址的两种写法

当队列值为空时,线程再去做请求会陷入阻塞,所以要为队列做判空操作或者加抛异常

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

while True:

    if not q.empty():

         url=q.get()

    else:

        break

方式二:超时抛异常

 try:

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

    ....

 except Exception as e:

     break

5.多线程争抢共同文件时的操作

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

方法如下:

from threading import Lock

lock=Lock()

lock.acquire() #加锁

代码块

local.relase() #释放

案例:

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解析库)

 

六、爬虫框架

1.Selenium

Selenium严格意义上来讲并不是一个框架,他与传统爬虫不一样,Selenium更像是一个模拟人类操作的机器人,简单点来说就是你打开一个网页,比如起点小说网,里面有非常多的小说,你想感兴趣的小说都复制到本地,人为来做这件事是不太可能的,一篇小说短则几百篇,长则几千上万篇,你一篇一篇的复制可能吗?这时候你可以写一个Selenium爬虫程序,模拟你的行为:打开网页,点击一篇小说,打开第一章,复制第一章,关闭网页,打开第二章,复制第二章.....直到最后一章。Selenium就是在做这样一件事,并且这些操作都是可视化的(你能看到它在做这件事),这是与传统爬虫差别最大的地方。

Selenium+ChromeDriver框架,Selenium入门,百度搜索,猫眼电影,京东商城案例

 

2.Scrapy框架

Scrapy是目前python最为流行的框架,这个框架帮我们做了很多前期工作,省去了重复编写的麻烦,最关键的是为爬虫程序提供了一套可行的框架,尽可能做到了解耦,使团队编程成为可能,如果要做python爬虫,Scarpy是必须掌握的。

教程:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章