网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。
简单来说就是你写个脚本去抓别人网页上的内容。
举个例子,上面这张图片是前程ipipgo招聘网站上关于python招聘的一些信息,找工作的时候你想把这些数据抓下来放进一个excel表格里面方便你筛选排序对比选择,这时你一个一个链接点开去复制里面的对应条目内容,显然这个简单重复的操作做多了会让你抓狂,这时你写个爬虫去帮你机械的抓取,比人工一个个复制来的轻松。(文末赠送我练习时写的前程ipipgo爬虫)
当然,如果你只是想简单的复制某一个网站上的某张图片或者某段话,写个爬虫就显得多此一举了,毕竟写个小脚本还是要点时间的。
写这篇文章的初衷是想介绍一下爬虫的大概样貌和爬虫学习中两个重要的点,毕竟当初自己学的时候找不到重点,有些视频半天不知道他在干啥。
先说说爬虫大概是怎么玩的。
文章开头的引用维基百科对爬虫的解释,说它是网络机器人,其实具体的就是写一段代码,向某一网址(URL)发送访问请求,这个动作对应的是我们人工访问网站时把网址输进去或者百度搜索找到网页之后点击进入。网站服务器接收到访问请求后,返回响应文件,对应的就是我们看到的页面,只是爬虫拿到的是一个网页文本,而我们看到的是经过浏览器排版的的网页。拿到响应文件之后,写一些限制性的语句,告诉程序我要哪块内容,拿到内容后以自己想要的方式保存就行了。
爬虫的流程:构建URL-发送请求-获取响应-提取内容-保存。
来说说第一个重要工作:构建URL。
探索要爬的网站的URL规律,按规律构建URL。
下面是前程ipipgo搜索昆明的“python”相关职位弹出来的网页的URL。
https://search.51job.com/list/250200,000000,0000,00,9,99,python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=
其中“250200,000000,0000,00,9,99,”是他网站自己对城市的编码,这儿的编码代表昆明。
紧跟在城市后面的“python”是用户搜索的职位名称,”.html”前面那个“1”是网页页码,其他的东西都不变,复制下来就可以了。
url_tou
像这样把URL前后端不变的东西挑出来。
key_word = input("你要爬取的职位名称:") zwmc = urllib.parse.quote(key_word) start_page = int(input("你要爬取的起始页:")) end_page = int(input("你要爬取的结束页:")) for page in range(start_page,end_page+1): page_url = self.url_tou + zwmc + ",2," + str(page) + self.url_wei
上面是构建URL的语句,其中根据用户需求不同而改变的就是“zwmc”和“page”,把各条字符串连起来就是一个完整的URL了。
有了URL用python的一些第三方库模拟用户发送请求,得到响应,接下来就是第二个
重要工作:解析网页。
网页拿回来了,要搞清楚别人的网页文档类型是什么,你需要的数据放在哪个位置,才能准确的定位自己需要的内容。
上图是一个网页文档的部分截图,网页的内容都是用前标签和后标签卡住的,比如我需要这个岗位的薪资信息,我就写一条语句告诉程序,我要前标签<span class="t4">和后标签</span>中间卡住那个东西,提取内容的方法和途径很多,比如用正则表达式、BeautifulSoup、x-path、json-path等等。顺便说个相关的小tricks:不知道你有没有遇到过那种不让复制内容的网站,如果遇到了想要其中的某段内容,可以试试在网页上右键选择“查看网页源代码”,ctrl+F搜索到你要的内容复制就行了。
以上只是简单说了一下我个人觉得写爬虫过程中比较重要的两个环节,其他的还有很多细节和坑要填,如果真的想学一个东西,填坑是必然的。简单列一下我学习过程中遇到的坑:首先是抓包,一次请求会返回很多响应,哪个才是你需要的?然后是构建请求头的问题,很多网站都有反爬虫机制,怎么才能伪装的更像用户在用浏览器上网?再然后是有些网站直接加密自己的数据,你响应拿回的关键数据是一串乱码,肿么破?再再然后是一些细小的坑,如get请求和post请求是什么?Ajax异步加载的网页怎么搞?返回的响应是json格式怎么办?有的网页有压缩怎么办?最后就是各种python库的选择,关于请求网页的工具,我只用过urllib和requests,推荐人性化点的requests,解析网页的库,推荐BeautifulSoup和x-path,正则表达式可以学学,有用。
本文只是涉及到爬虫的一点皮毛,实际爬虫的体系很庞大,用处也很多,内容复杂,有兴趣的请自行探索。
我学爬虫前后大概用了一个月时间,大的爬虫框架不行,小的实用型的爬虫还是没问题的(对大多数普通网页而言),所以想入门并不难,加油吧骚年。
最后把文中举例的这个前程ipipgo的爬虫分享出来,只要你会下载个python安装配置好,把代码贴进去就能跑。
这是运行时需要输入的3个参数。
这是爬完的效果图。
有兴趣的朋友可以关注我的微信公众号“凌云水手记”回复“前程ipipgo爬虫”即可下载。
附上我觉得将爬虫讲的比较好的一个B站资源,真心刚学的时候看了好多视频,有些人是咋咋呼呼的,不知所云,确实他会,但是他讲不出来啊。
https://www.bilibili.com/video/av45394845?from=search&seid=7320177896117499774www.bilibili.com
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试