美文网首页
python爬虫之单纯用find()函数来爬取数据

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

作者: 博观厚积 | 来源:发表于2016-12-22 21:42 被阅读90次

    对于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,可以看到每个短评处于<p class=""> </p>之间,那么就可以使用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往前一位,如图:
    ![](https://pic3.zhimg.com/v2-3d1413adb960687a23935a99e01630fe_b.png)但是如果单纯依靠strip()来去除标点符号等,还会出现错误,比如有人用手机发帖,在<p class=""> </p>之间还会有如下字符:
    ![](https://pic1.zhimg.com/v2-972d482565ae4c0130c418a1fd1b478c_b.png)因此,在这里先用split截取第一个字段,再strip().
    最终打印,得到第一页所有短评文字。对于多网页的抓取则可以再使用while循环,结合每个网页的特点,运用page = page + 1来不断抓取。在此基础上,设置一定的停止条件,就爬到了对《长城》这一电影所有短评。然后我们就可以进行分析大家对《长城》这部电影的关注点、吐糟点等等,采用词频分析,文本挖掘以及词云等来进行数据分析。

    相关文章

      网友评论

          本文标题:python爬虫之单纯用find()函数来爬取数据

          本文链接:https://www.haomeiwen.com/subject/mimhvttx.html