目的:爬取豆瓣【红海行动】电影的首页短评
步骤:
1、使用BeautifulSoup解析网页
soup = BeautifulSoup(r, 'lxml') // lxml 库解析速度快,也能解析复杂网页
2、描述要爬取的东西在哪
soup.find_all() 或者 soup.select()
3、从标签中获取所需信息,如<p>something</p>
代码:
# -*- coding: utf-8 -*-
# __author__ = 'Carina'
import requests
import pandas
from bs4 import BeautifulSoup
url = "https://movie.douban.com/subject/26861685/comments"
r = requests.get(url).text
# print(r)
soup = BeautifulSoup(r, 'lxml')
pattern = soup.find_all('p', class_='')
# p1 = soup.select("#comments > div:nth-of-type(1) > div.comment > p") // Copy Selector
comments = []
for item in pattern:
print(item.string)
comments.append(item.string)
df = pandas.DataFrame(comments)
# 未指定路径时,csv文件同PY文件一个目录
# df.to_csv('comments.csv')
# 指定文件路径,并自动转码
df.to_csv('C:/Users/Carina/Desktop/comments.csv', encoding='utf_8_sig')
提示:
requests是Python 的http库,常用的就是get方法
问题一:
1、class没有值
(1)直接2个单引号,soup.find_all('p', ''),同时问题也来了,所有p里面的内容都被输出
另外还有手机端评论的内容输出时显示为None(待研究)
(2)查找时加上class, pattern = soup.find_all('p', class='')
系统提示语法错误,因为class在python中是保留字(reserved word),不能作为变量名或过程名使用,所以class_应运而生;
即: pattern = soup.find_all('p', class_='')
总结:BeautifulSoup 只认CSS Selector,不认Xpath
网友评论