BeautifulSoup findAll возвращает пустой список при выборе класса - PullRequest
1 голос
/ 23 апреля 2019

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

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Чтобы получить все комментарии, вам понадобится метод, такой как селен, который позволит вам прокручивать.Без этого, просто чтобы получить первоначальные результаты, вы можете извлечь из тега сценария в 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 голос
/ 23 апреля 2019

Селектор, который вы пытаетесь использовать, не годится, потому что у вас нет 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...