2016-07-10 4 views
2

просто пытались разобрать Reddit душ мысль для представлений и столкнулись с проблемой:красивый суп и синтаксический Reddit

path = 'https://www.reddit.com/r/Showerthoughts/' 

with requests.Session() as s: 

    r = s.get(path) 
    soup = BeautifulSoup(r.content, "lxml") 

    # print(soup.prettify()) 

    threads = soup.find_all('p') 


    for thread in threads: 
     soup = thread 
     text = soup('a') 
     try: 
      print(text[0]) 
     except: 
      pass 

в этом коде я пытаюсь просто получить название каждого представления, которое прилагается в теге < p>, а затем теге < a> с классом «title can-blank». но над кодом возвращается все элементы с тегом, которого много, и даже думал, что названия там, я должен был бы пройти еще два взаимодействия soup.findAll(), и я уверен, что существует менее ручной способ поиска через суп печать всех названий

из моих знаний я пытался сделать

titles = soup.findAll("a", {"class":"title may-blank}) for title in titles: print(title.string)
, но это не работало какие-нибудь мысли? PS Я знаю, что это можно сделать с помощью reddit API и более эффективно, но я хочу улучшить свои навыки разбора, потому что они не до нуля. Спасибо за помощь

+0

Вы можете получить содержимое своего субредакта в формате JSON, используя 'http: // www.reddit.com/r/Showerthoughts/.json' – PaulMcG

ответ

2

Они CSS классы, также необходимо добавить агент пользователя:

import requests 
from bs4 import BeautifulSoup 
path = 'https://www.reddit.com/r/Showerthoughts/' 
headers ={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"} 
with requests.Session() as s: 
    r = s.get(path, headers=headers) 
    soup = BeautifulSoup(r.content, "lxml") 
    threads = soup.select('a.title.may-blank') 
    for a in threads: 
     print(a) 

Вы также можете использовать soup.find_all("a", class_="title"), но которые могли бы соответствовать больше, чем вы хотите.

+0

отлично получило это, спасибо, человек, карма ваш путь – entercaspa

+0

Не беспокойтесь, если вы хотите текст, напечатайте 'a.text', если вы хотите, чтобы href просто' a ["href"] 'и присоединил его к базовому URL-адресу, если вы хотите его посетить. –

Смежные вопросы