这篇文章给大家分享的是有关如何用python做一个简单的爬虫的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
爬虫技术是一个获取信息和数据的重要手段。学习用python做一个简单的爬虫。
<强>爬虫主要分为两个部分:强>
获取数据
urllib内建模块(url.request)
请求第三方库
Scrapy框架
第三方的API
解析数据
BeautifulSoup库
再保险模块
<强>一。从网络上取的数据强>
简单的爬虫是可以使用请求库来完成的。
请求的基本使用方法
requests.get()用来请求指定URL位置的资源,对应的是HTTP协议的得到方法。
爬虫有各式各样的,做个简单的来玩耍一下,下面以爬豆瓣读书上《利用python进行数据分析》这本书的的书评作为例子。
最简单的爬回来一个页面
import 请求 时间=r requests.get (& # 39; https://book.douban.com/subject/25779298/comments/& # 39;) with 开放(" # 39;D: \ demo.txt& # 39;,, & # 39; w # 39;), as 文件: ,,,file.writelines (r.text)
使用请求模块的得到方法,从网站上把一整个页面全都保存到了本地的D盘中的demo.txt文件中。这是一个极度简单的爬虫。其中请求本身自己还有许多属性和方法,可以去官网参考学习。如果需要把爬虫收集回来的数据保存到本地的话,还需要去了解一下文件操作和数据库操作的知识。
<强>二。把数据解析出来强>
一般的标签网页解析——BeautifulSoup
安装的时候要注意:Pyhton3要安装BeautifulSoup4才是正常使用的。
打开刚才生成的演示。txt文件,会发现文件中保存的是一整个页面的代码,内容十分复杂,所以需要去解析一下页面的内容,才能够把我们需要的短评抽取出来。我们先研究一下。
打开文件,或者在网页页面按F12进入调试模式会发现,短评基本上是在一个相同的类的p标签里面的
& lt; p 类=癱omment-content"在入门书,零基础看了这本书也能用python的熊猫和matplotlib进行一些简单的数据分析, 数据分析不在乎用什么工具,而是有目的地去找一y些洞察力,下一步我需要达到的效果是:如果产生一个想法, 能用工具快速验证(如数据预处理,绘出图标等)。;/p>
引入beautifulsoup来解析一下。要使用到的lxml解析包同样是需要安装的。
修改一下刚才的极简爬虫:
import 请求 得到bs4 import  BeautifulSoup 时间=r requests.get (& # 39; https://book.douban.com/subject/25779298/comments/& # 39;) 时间=bs BeautifulSoup (r.text, & # 39; lxml # 39;) 时间=comments bs.find_all (& # 39; p # 39;,, & # 39; comment-content& # 39;) with 开放(" # 39;D: \ demo1.txt& # 39;,, & # 39; w # 39;), as 文件: ,,,for item 拷贝的评论: ,,,,,,,file.writelines (item.string)
激动的打开了演示。txt文件后,发现天呐撸,所有的评论都窝在一行了,我们要给他区分出来,并且换行,再简单也要有点可读性。
修改一下刚才的小爬虫:
file.writelines(时间+ item.string & # 39; \ n # 39;)
只要写文件的时候加入这么一个简单的换行符,就可以把每个评论换行来看了,而不是挤成一坨。
复杂细节解析——正则表达式
玩玩爬完文字评论,可以发现,豆瓣本身还是有一个评星星等级的一个评价,把这个也爬下来作为一个数据收集起来。打开网页,F12找到这个评星星会发现,这个直接读取标签内的内容不一样,它是写在标签的类里面的。例如下面的五星推荐是allstar50,而一个四星评价是allstar40。
& lt; span 类=皍ser-stars allstar50 rating", title=傲觥白4? lt;/span> & lt; span 类=皍ser-stars  allstar40 rating", title=巴萍觥白4? lt;/span>
这里就需要使用正则表达式来提取这种复杂的情况。因为不是所有人都有打分,把有分数都拿出来,然后给算一个平均值作为参考。
再让小爬虫变身一下:
import 请求 import 再保险 得到bs4 import  BeautifulSoup #,得到评论正文 时间=r requests.get (& # 39; https://book.douban.com/subject/25779298/comments/& # 39;) 时间=bs BeautifulSoup (r.text, & # 39; lxml # 39;) 时间=comments bs.find_all (& # 39; p # 39;,, & # 39; comment-content& # 39;) #,得到评论的评分并计算总分和平均分 时间=rule re.compile (& # 39; & lt; span 类=皍ser-stars 全明星([0 - 9]* ?),rating" & # 39;), #,配置匹配规则 comments_star =, re.findall(规则,r.text) totalsocre =0 for star  comments_star拷贝: ,,,totalsocre +=, int(明星) 时间=avgsocre totalsocre /, len (comments_star) with 开放(" # 39;D: \ demo1.txt& # 39;,, & # 39; w # 39;), as 文件: ,,,file.write(& # 39;此书的评价平均分(满50分):,,& # 39;,+,str (avgsocre), +, & # 39; \ n # 39;) ,,,for item 拷贝的评论: ,,,,,,,file.write(时间+ item.string & # 39; \ n # 39;)如何用python做一个简单的爬虫