在豆瓣中提取影评的代码:可以正确输出结果
但不知为何,在百度贴吧中想爬取评论,同样的代码,无法输出文本
正确代码:
错误代码:
有没有大佬帮忙看一看:到底是哪里出了问题
给你提供两段代码, 一个是我之前写的爬取豆瓣影评的, 可爬取多页, 还有一个爬取贴吧的, 只写了爬取一页的, 供参考, 关键是修改获取信息的节点, 方法很多, 我用的是select
豆瓣
# 导入工具包
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import numpy as np
# 请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'}
url = ['https://movie.douban.com/subject/34841067/comments?start={}&limit=20&status=P&sort=new_score'.format(i) for i in range(0,100,20)]
lis2 = []
for urli in url:
# 获取信息
html = requests.get(urli,headers=headers)
# 获取内容
data = html.text
soup = BeautifulSoup(data,'lxml')
# 用户
names = soup.select('#comments > div > div.comment > h3 > span.comment-info > a')
# 评级
pingjis = soup.select('#comments > div > div.comment > h3 > span.comment-info')
# 日期
riqis = soup.select('#comments > div > div.comment > h3 > span.comment-info > span.comment-time')
# 内容
neirongs = soup.select('#comments > div > div.comment > p > span')
for name,pingji,riqi,neirong in zip(names,pingjis,riqis,neirongs):
pingji_re = pingji.find_all('span')
lis2.append([name.get_text(),
pingji_re[1]['class'],
pingji_re[1]['title'],
riqi.get_text().strip(),
neirong.get_text()])
print('完成:',urli)
time.sleep(np.random.randint(5,10))
result2 = pd.DataFrame(lis2,columns=['用户','评级','等级','日期','内容'])
result2.to_excel('C:/Users/用户/Desktop/电影评论数据.xlsx')
贴吧, 爬取多页可参照上面的代码. (没有考虑需要登录或者有异步加载等特殊情况), 你先试试看
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import numpy as np
# 请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'}
# =============================================================================
# 爬取一页
# =============================================================================
# 爬取的网址
url='https://tieba.baidu.com/p/6986819121'
# 获取信息
html = requests.get(url,headers=headers)
# 获取内容
data = html.text
soup = BeautifulSoup(data,'lxml')
# 信息
# 用户
names = soup.select('#j_p_postlist > div > div.d_author > ul > li.d_name > a')
# 评论
pingluns = soup.select('#j_p_postlist > div > div.d_post_content_main > div.p_content')
# 空list
lis=[]
for name,pinglun in zip(names,pingluns):
pinglun_re = pinglun.find_all('div')
lis.append([name.get_text().strip(),
pinglun_re[2].get_text().strip()])
result1 = pd.DataFrame(lis,columns=['用户','评论'])
首先不同的网站,请求时的请求方式、请求头、是否需要传递cookies以及其他参数都不一定相同,尤其是节点选择更是如此,因此在对其他网站request时,用同一个代码很难获取到你想要的结果的。
把百度贴吧的参数全部加上再试试
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
上不了网有信号上不了网