豆瓣评论第一页爬取

import requests
# 先进行第一次安装
from lxml import etree
import pandas as pd
url="https://book.douban.com/subject/1084336/comments/"
r=requests.get(url).text
s=etree.HTML(r)
# 获取文本内容用text(),观察下面获取的第一个、第二个文本内容时的xpath后面寻找数据的参数的变化(浏览器复制方法)
# print(s.xpath('//*[@id="comments"]/ul/li[1]/div[2]/p/span/text()'))
# print(s.xpath('//*[@id="comments"]/ul/li[2]/div[2]/p/span/text()'))
#print(s.xpath('//*[@id="comments"]/ul/li/div[2]/p/span/text()'))
file=s.xpath('//*[@id="comments"]/ul/li/div[2]/p/span/text()')
df=pd.DataFrame(file)
# df.to_csv('pinglun.xlsx')
df.to_excel('pinglun2.xlsx')
# 这里运行结果显示ModuleNotFoundError: No module named 'openpyxl',所以需要安装这个库,这个库是保存excel文件的依赖库,最好使用
# csv形式,但比较写入的结果而言,to_excel的结果更为规范

# 尝试手写
print(s.xpath('//div[@class="comment"]/p/span/text()')[0])
print("\n".join(s.xpath('//div[@class="comment"]/p/span/text()')))
# 也可以通过其他方式获取文本内容
# 获取第一个
print(s.xpath('//*[@id="comments"]/ul/li[position()=1]/div[2]/p/span/text()'))
# 获取最后一个p
print(s.xpath('//*[@id="comments"]/ul/li[last()]/div[2]/p/span/text()'))

xpath是一个非常好用的方法,可以灵活多样的寻找我们需要的数据。

接下来就要进行思考如何爬取多页的数据。当然,要遵守robots.txt协议。

以下是使用Python爬取豆瓣电影评论的示例: 1. 首先,我们需要导入需要的库,包括requests、BeautifulSoup和re: ```python import requests from bs4 import BeautifulSoup import re ``` 2. 接下来,我们需要获取要爬取的电影的URL和评论的页数: ```python url = 'https://movie.douban.com/subject/34841067/comments?start=0&limit=20&status=P&sort=new_score' page_num = 5 # 想爬取评论页数 ``` 3. 然后,我们可以编写一个函数来获取每一页的评论: ```python def get_comments(url): headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') comments = soup.find_all('span', class_='short') return comments ``` 上面的函数使用了requests库来获取HTML页面,然后使用BeautifulSoup库来解析HTML页面并获取评论。我们将评论存储在一个列表中并返回。 4. 接下来,我们可以编写一个函数来获取所有评论: ```python def get_all_comments(url, page_num): all_comments = [] for i in range(page_num): start_num = i * 20 url = re.sub('start=\d+', 'start={}'.format(start_num), url) comments = get_comments(url) all_comments.extend(comments) return all_comments ``` 上面的函数使用了一个for循环来获取所有的评论,它首先从第一页开始,然后逐个增加页面号并获取每一页的评论。最后,它将所有的评论存储在一个列表中并返回。 5. 最后,我们可以调用get_all_comments函数来获取所有评论: ```python all_comments = get_all_comments(url, page_num) for comment in all_comments: print(comment.text) ``` 上面的代码将打印所有的评论文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值