Python无法爬取论坛数据

在豆瓣中提取影评的代码:可以正确输出结果

但不知为何,在百度贴吧中想爬取评论,同样的代码,无法输出文本

正确代码:

错误代码:

有没有大佬帮忙看一看:到底是哪里出了问题 

给你提供两段代码, 一个是我之前写的爬取豆瓣影评的, 可爬取多页, 还有一个爬取贴吧的, 只写了爬取一页的, 供参考, 关键是修改获取信息的节点, 方法很多, 我用的是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

上不了网有信号上不了网