温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用python做一个简单的爬虫

发布时间:2020-11-24 14:16:45 来源:亿速云 阅读:392 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关如何用python做一个简单的爬虫的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

爬虫技术是一个获取信息和数据的重要手段。学习用python做一个简单的爬虫。

爬虫主要分为两个部分:

获取数据

urllib 内建模块(url.request)

Requests 第三方库

Scrapy框架

第三方的API

解析数据

BeautifulSoup库

re模块

一.从网络上取的数据

简单的爬虫是可以使用Requests库来完成的。

Requests的基本使用方法

requests.get()用来请求指定URL位置的资源,对应的是HTTP协议的GET方法。

爬虫有各式各样的,做个简单的来玩耍一下,下面以爬豆瓣读书上《利用Python进行数据分析》这本书的的书评作为例子。

最简单的爬回来一个页面

import requests

r = requests.get('https://book.douban.com/subject/25779298/comments/')
with open(r'D:\demo.txt', 'w') as file:
    file.writelines(r.text)

使用requests模块的get方法,从网站上把一整个页面全都保存到了本地的D盘中的demo.txt文件中。这是一个极度简单的爬虫。其中requests本身自己还有许多属性和方法,可以去官网参考学习。如果需要把爬虫收集回来的数据保存到本地的话,还需要去了解一下文件操作和数据库操作的知识。

二.把数据解析出来

一般的标签网页解析--BeautifulSoup

安装的时候要注意:Pyhton3要安装BeautifulSoup4才是正常使用的。

打开刚才生成的demo.txt文件,会发现文件中保存的是一整个页面的代码,内容十分复杂,所以需要去解析一下页面的内容,才能够把我们需要的短评抽取出来。我们先研究一下。

打开文件,或者在网页页面按F12进入调试模式会发现,短评基本上是在一个相同的class的p标签里面的

<p class="comment-content">入门书,零基础看了这本书也能用python的pandas和matplotlib进行一些简单的数据分析,
数据分析不在乎用什么工具,而是有目的地去找一y些insight,下一步我需要达到的效果是:如果产生一个想法,
能用工具快速验证(如数据预处理,绘出图标等)。</p>

引入beautifulsoup来解析一下。要使用到的lxml解析包同样是需要安装的。

修改一下刚才的极简爬虫:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://book.douban.com/subject/25779298/comments/')
bs = BeautifulSoup(r.text, 'lxml')
comments = bs.find_all('p', 'comment-content')

with open(r'D:\demo1.txt', 'w') as file:
    for item in comments:
        file.writelines(item.string)

激动的打开了demo.txt 文件后,发现天呐撸,所有的评论都窝在一行了,我们要给他区分出来,并且换行,再简单也要有点可读性。

修改一下刚才的小爬虫:

file.writelines(item.string + '\n')

只要写文件的时候加入这么一个简单的换行符,就可以把每个评论换行来看了,而不是挤成一坨。

复杂细节解析--正则表达式

玩玩爬完文字评论,可以发现,豆瓣本身还是有一个评星星等级的一个评价,把这个也爬下来作为一个数据收集起来。打开网页,F12找到这个评星星会发现,这个直接读取标签内的内容不一样,它是写在标签的class里面的。例如下面的五星推荐 是 allstar50,而一个四星评价是 allstar40。

<span class="user-stars allstar50 rating" title="力荐"></span>

<span class="user-stars allstar40 rating" title="推荐"></span>

这里就需要使用正则表达式来提取这种复杂的情况。因为不是所有人都有打分,把有分数都拿出来,然后给算一个平均值作为参考。

再让小爬虫变身一下:

import requests
import re
from bs4 import BeautifulSoup

# 得到评论正文
r = requests.get('https://book.douban.com/subject/25779298/comments/')
bs = BeautifulSoup(r.text, 'lxml')
comments = bs.find_all('p', 'comment-content')

# 得到评论的评分并计算总分和平均分
rule = re.compile('<span class="user-stars allstar([0-9]*?) rating"') # 配置匹配规则
comments_star = re.findall(rule, r.text)
totalsocre = 0
for star in comments_star:
    totalsocre += int(star)
avgsocre = totalsocre / len(comments_star)

with open(r'D:\demo1.txt', 'w') as file:
    file.write('此书的评价平均分(满分50):  ' + str(avgsocre) + '\n')
    for item in comments:
        file.write(item.string + '\n')

感谢各位的阅读!关于如何用python做一个简单的爬虫就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI