简洁实用的Python爬虫入门(运行通过,结果存于Excel)----爬取电影评论数据

简洁实用的Python爬虫入门(运行通过,结果存于Excel))----爬取电影评论数据

    • 基础
    • 代码
    • 结果

很喜欢一句话“all things are difficult before they are easy”,它鼓励我去尝试了自己觉得难的事,今天照葫芦画瓢,实现了以前比较好奇的爬虫,这里作个简单笔记。
流程参考了《1小时入门 Python 爬虫(上)》,作者写得很详细,链接: link.
一些基本语法知识参考w3school.链接: link.

基础

  • Requests :爬取评论;
  • Xpath:解析短评;
  • pandas:保存数据;

1.Requests 库

Requests 库中常用的方法:

  • requests.get():**获取 HTML 网页的主要方法,对应于 HTTP 的 GET。
  • requests.head():获取HTML 网页头信息的方法,对应于 HTTP 的 HEAD。
  • requests.post():向 HTML 网页提交 POST 请求的方法,对应于 HTTP 的 POST。
  • requests.put():向 HTML 网页提交 PUT 请求的方法,对应于 HTTP的 PUT
  • requests.patch():向 HTML 网页提交局部修改请求,对应于 HTTP 的 PATCH。
  • requests.delete():向 HTML 网页提交删除请求,对应于 HTTP 的 DELETE。

常见的对象属性:

  • r.status_code:HTTP 请求的返回状态,200表示连接成功(阅读 HTTP 状态码,了解各状态码含义);
  • r.text:返回对象的文本内容;
  • r.content:猜测返回对象的二进制形式;
  • r.encoding:分析返回对象的编码方式。

(2)Xpath 解析
XPath 即为 XML 路径语言(XML Path Language),是一种用来确定 XML 文档中某部分位置的语言,XPath 用于在 XML 文档中通过元素和属性进行导航。 使用简单,速度快(Xpath 是 lxml 里面的一种),也是抓取数据最好的选择。

使用 Xpath 解析网页数据的一般步骤为:

  • 从 lxml 导入etree

from lxml import etree

解析数据,返回 XML 结构

url = ‘https://movie.douban.com/subject/26752700/comments?sort=new_score&status=P’
rr = requests.get(url).text
s = etree.HTML(rr)

使用 .xpath() 寻找和定位数据。

file = s.xpath(’//*[@id=“comments”]/div/div[2]/p/span/text()’)

获取 Xpath 的方法直接从浏览器中复制:F12 —>点击要爬取的文本,在右边单击右键—> Copy —> Copy Xpath,即可完成 Xpath 的复制。
简洁实用的Python爬虫入门(运行通过,结果存于Excel)----爬取电影评论数据_第1张图片
但注意,此时复制的是一条文本的位置,如果需要复制多条,需要改动要变化的标签。

代码

这里我选择了前端时间沸沸扬扬的电影《漂亮的李慧珍》,想要爬取图片中红框的内容:
简洁实用的Python爬虫入门(运行通过,结果存于Excel)----爬取电影评论数据_第2张图片
代码如下:

# 导入requests库
import requests
# 从lxml导入etree
from lxml import etree
import pandas as pd
# 漂亮的李慧珍的url
url = 'https://movie.douban.com/subject/26752700/comments?sort=new_score&status=P'
# 获取内容
rr = requests.get(url).text
# 解析html
s = etree.HTML(rr)
# 使用.xpath()寻找和定位数据(id名,时间,评论内容),注意变动标签
result=s.xpath('//*[@id="comments"]/div/div[2]/p/span/text()')
name=s.xpath('//*[@id="comments"]/div/div[2]/h3/span[2]/a/text()')
time=s.xpath('//*[@id="comments"]/div/div[2]/h3/span[2]/span[3]/text()')
#因为直接得到的时间格式含有/n和空格
#['\n         2017-01-03\n        ', '\n          2017-01-02\n       ']
for i in range(len(time)):
    time[i] = time[i].strip().replace(' ','')
#将列表(List)转换为数据框(Dataframe)
all_data={"id":name,
            "time":time,
            "result":result}
final_data=pd.DataFrame(all_data)
#将数据存成excel
final_data.to_excel('final_data.xlsx')

结果

简洁实用的Python爬虫入门(运行通过,结果存于Excel)----爬取电影评论数据_第3张图片

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