目录
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多线程思路