findall()指定类时返回空列表
指定标签可以正常工作
import urllib2
from bs4 import BeautifulSoup
url = "https://www.reddit.com/r/Showerthoughts/top/?sort=top&t=week"
hdr = { 'User-Agent' : 'tempro' }
req = urllib2.Request(url, headers=hdr)
htmlpage = urllib2.urlopen(req).read()
BeautifulSoupFormat = BeautifulSoup(htmlpage,'lxml')
name_box = BeautifulSoupFormat.findAll("a",{'class':'title'})
for data in name_box:
print(data.text)
我正在尝试仅获取帖子的文本。当前代码什么都不打印。如果我删除了{'class':'title'},它会打印出我不想要的帖子文字,用户名和帖子的评论。
我正在将python2与最新版本的BeautifulSoup和urllib2一起使用
答案 0 :(得分:2)
要获取所有注释,您将需要诸如selenium之类的方法来进行滚动。如果没有这些,就可以得到初步的结果,您可以从requests
响应中的脚本标签中获取
import requests
from bs4 import BeautifulSoup as bs
import re
import json
headers = {'User-Agent' : 'Mozilla/5.0'}
r = requests.get('https://www.reddit.com/r/Showerthoughts/top/?sort=top&t=week', headers = headers)
soup = bs(r.content, 'lxml')
script = soup.select_one('#data').text
p = re.compile(r'window.___r = (.*); window')
data = json.loads(p.findall(script)[0])
for item in data['posts']['models']:
print(data['posts']['models'][item]['title'])
答案 1 :(得分:1)
您尝试使用的选择器不好,因为这些帖子没有class =“ title”。请尝试以下操作:
name_box = BeautifulSoupFormat.select('a[data-click-id="body"] > h2')
这会找到所有<a data-click-id="body">
标签<h2>
,其中包含您需要的帖子文本
有关使用BeatufulSoup的选择器的更多信息,您可以在这里阅读: (https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors)