Python爬虫实践《流浪地球》豆瓣影评分析及实践心得

一段多余的话

多余的话不多说,我想聊聊在进行实践分析中遇到的困难与心得。

下载jupyter进行分析的一些建议

我们安装juputer前,首先需要安装python,因为本人曾经上过自然语言处理课,所以已经安装完成(3.8版本)。

  1. jupyter的下载参照官网
  2. 这里要提一点,最好将anaconda提前下载好,免得像我一样引用库时又要花费不必要的时间等待,除此之外它还能提供代码智能提示等功能。
  3. 对于驱动浏览器种类与版本的选择,我的是谷歌(87.0.4280.88)版本,,可以通过以下网址找到对应的ChromeDriver:http://chromedriver.storage.googleapis.com/index.html

数据爬取和分析时的困难

  1. 在爬取网页所需信息时,一般在目标网站中找到所需属性,利用xpath确定文档路径(一般可以通过class标签和span标签来寻找),而在获取数据的时候要注意标签里的元素,比如在爬取豆瓣短评时@class="comment-item ",中的item后面有个空格,小细节有些时候也会节省很多时间。
  2. 将数据爬取成功后输出的CSV文件有乱码,是因为默认的字符编码对中文不友好,建议改为GB18030。
  3. 在导入各种库时,推荐使用以下命令:pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com,亲测有效且更快捷

以下为爬取分析的全部代码:

1. 爬取短评数据

def get_web_data(dom=None, cookies=None): 
 	'''
    获取每页评论数据
    '''
    names = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/a/text()')#用户名
    ratings = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/span[2]/@class')#用户评分
    #times = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/span[3]/@title')#发布时间
    times = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/span[@class="comment-time "]/@title')#发布时间
    message = dom.xpath('//div[@class="comment-item "]//div[@class="comment"]//span[@class="short"]/text()')#短评正文
    user_url = dom.xpath('//div[@class="comment-item "]//span[@class="comment-info"]/a/@href')#用户主页网址
    votes = dom.xpath('//div[@class="comment-item "]//div[@class="comment"]//span[@class="votes vote-count"]/text()')#赞同数量
    cities = []
    load_times = []
    for i in user_url:
        web_data = requests.get(i, headers=headers, cookies=cookies)
        dom_url = etree.HTML(web_data.text, etree.HTMLParser(encoding='utf-8'))
        address = dom_url.xpath('//div[@class="basic-info"]//div[@class="user-info"]/a/text()')      #用户居住地
        load_time = dom_url.xpath('//div[@class="basic-info"]//div[@class="user-info"]/div[@class="pl"]/text()')      #用户入会时间
        cities.append(address)
        load_times.append(load_time)
        time.sleep(2)
    ratings = ['' if 'rating' not in i else int(re.findall('\d{2}', i)[0]) for i in ratings]     #评分数据整理
    load_times = ['' if i == [] else i[1].strip()[:-2] for i in load_times]     #入会数据整理
    cities = ['' if i == [] else i[0] for i in cities]     #居住地数据整理
    data = pd.DataFrame({
   
        '用户名': names,
        '用户居住地': cities,
        '用户入会时间': load_times,
        '用户评分': ratings,
        '发布时间': times,
        '短评正文': message,
        '赞同数量': votes
    })
    return data
    
from selenium import webdriver
from lxml import etree
import requests
import time
  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值