【Python3爬虫】豆瓣《我不是药神》短评

工具:

Python3+Pycharm+Chrome


使用到的模块:

(1)requests:用来简单数据请求。(2)lxml:比BeautiSoup更快更强的解析库。(3)pandas:数据处理神器。(4)time:设置爬虫访问间隔。(5)random:生成随机数,配合time使用。(6)tqdm:显示程序运行进度。


步骤:

1、打开豆瓣电影《我不是药神》的短评网页,右键检查或者按F12,然后选择用户名和评论就会显示出对应的代码部分【Python3爬虫】豆瓣《我不是药神》短评_第1张图片

2、通过requests模块发送一个get请求,并以utf-8重新编码;然后添加一个交互,判断是否成功获取到资源(状态码为200),输出获取状态。对于爬取下来《我不是药神》的短评内容,我们用lxml来进行解析。在步骤1中找到对应部分的代码,然后右键选择Copy,再选择Copy XPath,就能获取其路径了。爬取下来的短评首尾可能有多余的空格,我们就需要使用字符串中的strip()方法来去掉这些多余的空格。

获取用户名和短评的代码如下:

name=x.xpath('//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a/text()'.format(i))
content=x.xpath('//*[@id="comments"]/div[{}]/div[2]/p/text()'.format(i))

3、获取到数据之后,我们通过list构造dictionary,然后通过dictionary构造dataframe,并通过pandas模块将数据输出为csv文件,代码如下:

infos={'name':name_list,'content':content_list}
data=pd.DataFrame(infos,columns=['name','content'])
data.to_csv("豆瓣《我不是药神》.csv")

运行截图:

这里我们爬取了十页短评的用户名和内容,借助tqdm模块就能够清晰地看到我们爬取的进度。

【Python3爬虫】豆瓣《我不是药神》短评_第2张图片


部分短评截图:

【Python3爬虫】豆瓣《我不是药神》短评_第3张图片


最终代码:

# 爬取电影《我不是药神》的短评
import requests
from lxml import etree
from tqdm import tqdm
import time
import random
import pandas as pd

name_list, content_list = [], []


def get_content(page):
    url = "https://movie.douban.com/subject/26752088/comments?start=20&limit=20&sort=new_score&status=P&percent_type={}" \
        .format(page * 20)
    res = requests.get(url)
    res.encoding = "utf-8"
    if (res.status_code == 200):
        print("\n第{}页短评爬取成功!".format(page + 1))
    else:
        print("\n第{}页爬取失败!".format(page + 1))

    x = etree.HTML(res.text)
    for i in range(1, 21):
        name = x.xpath('//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a/text()'.format(i))
        content = x.xpath('//*[@id="comments"]/div[{}]/div[2]/p/text()'.format(i))
        name_list.append(name[0])
        content_list.append(str(content[0]).strip())


if __name__ == '__main__':
    for i in tqdm(range(0, 10)):
        get_content(i)
        time.sleep(random.randrange(6, 9))
    infos = {'name': name_list, 'content': content_list}
    data = pd.DataFrame(infos, columns=['name', 'content'])
    data.to_csv("豆瓣《我不是药神》.csv")

你可能感兴趣的:(Python3爬虫)