python fine函数_python爬虫之单纯用find()函数来爬取数据

对于python软件爬取网页数据,一般采用BeautifulSoup库或者Xpath技术来解析html,然后寻找爬取对象的网页路径来定位所需数据,进而利用循环条件来不断获取数据。另外,也可以使用Scrapy框架来爬取。对于上述软件包或库,在进行网页爬虫时需要安装相关库并导入,而Scrapy框架目前windows系统下python3软件还不一定安装不了。

在这里介绍一种单纯使用find()函数来爬取数据的方法,它不需要安装和导入上述Python库,仅仅依靠读取网页之后形成的代码文档,通过定位爬取对象的位置及范围,来获得所需数据。在这里为了简单介绍一下这一方法,本文以最近上映大片——张艺谋导演的《长城》电影,其豆瓣短评的第一页为例(长城 短评),爬取每一个短评。

首先,导入urllib库,打开url网址并读取为utf-8格式

import urllib.request

req = urllib.request.urlopen('https://movie.douban.com/subject/6982558/comments?sort=new_score&status=P')

txt = req.read().decode('utf-8')

print(txt)

通过打印txt,可以看到每个短评处于

之间,那么就可以使用find函数来找到这两个参数第一次出现的开头位置。

words = txt.find(r'p class=""')

wordsend = txt.find(r'/p',words) #缩小范围,在words位置范围内寻找/p

其中,wordsend就在从第一个words出现的位置,这也能做可以缩小搜寻范围。

接下来就是存储第一个短评,并形成循环将该网页的其他短评也依次找到并存储。

com=[]

i =0

while words !=-1 and wordsend !=-1 :

com1 = txt[words +11:wordsend-1].split(' ')[0].strip()#将第一个评论储存起来

com.append(com1)

words = txt.find(r'p class=""',wordsend) #从上一个wordsend开始寻找下一个p class

wordsend = txt.find(r'/p', words)

i = i + 1

else:

print('the end!')

print(com)

在这里需要特别说明的就是,com1 = txt[words +11:wordsend-1].split(' ')[0].strip(),其中

txt[words +11:wordsend-1]就是网页txt文档中第一条短评的前后位置范围找到再提取出来,其中短评最开始的位置就是words变量中p class=""的p开始数字符串,第11位,结束位置则是wordsend中/p往前一位,如图:

但是如果单纯依靠strip()来去除标点符号等,还会出现错误,比如有人用手机发帖,在

之间还会有如下字符:

因此,在这里先用split截取第一个字段,再strip().

最终打印,得到第一页所有短评文字。对于多网页的抓取则可以再使用while循环,结合每个网页的特点,运用page = page + 1来不断抓取。在此基础上,设置一定的停止条件,就爬到了对《长城》这一电影所有短评。然后我们就可以进行分析大家对《长城》这部电影的关注点、吐糟点等等,采用词频分析,文本挖掘以及词云等来进行数据分析。

最后,说一下,这种方法需要对爬取对象的精准定位,否则定位不准或者网页中有其他数据类似定位的话,就会导致失败。因此,不像BeautifulSoup库或者Xpath技术在定位上这么清晰明白。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值