Как использовать BeautifulSoup для очистки ссылок на таблицы от Reddit - PullRequest
2 голосов
/ 24 марта 2019

Я пытаюсь очистить ссылки из таблицы Reddit с помощью Beautiful Soup и могу успешно извлечь все содержимое таблицы, кроме URL-адресов.Я использую item.find_all('a'), но при использовании этого кода возвращается пустой список:

import praw
import csv
import requests
from bs4 import BeautifulSoup

def Authorize():
    """Authorizes Reddit API"""
    reddit = praw.Reddit(client_id='',
                     client_secret='',
                     username='',
                     password='',
                     user_agent='user')

url = 'https://old.reddit.com/r/formattesting/comments/94nc49/will_it_work/'
headers = {'User-Agent': 'Mozilla/5.0'}
page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.text, 'html.parser')

table_extract = soup.find_all('table')[0]
table_extract_items = table_extract.find_all('a')

for item in table_extract_items:
    letter_name = item.contents[0]
    links = item.find_all('a')
    print(letter_name)
    print(links)

Это то, что он возвращает:

6GB EVGA GTX 980 TI
[]
Intel i7-4790K
[]
Asus Z97-K Motherboard
[]
2x8 HyperX Fury DDR3 RAM
[]
Elagto HD 60 Pro Capture Card
[]

Я хотел бы, чтобы был URLгде пустой список находится под каждой строкой таблицы.

Я не уверен, имеет ли это значение в конструкции, но конечной целью является извлечение всего содержимого таблицы и ссылок (сохраняя связь между ними) и сохранение в CSV в виде двух столбцов.Но сейчас я просто пытаюсь print сделать это проще.

1 Ответ

1 голос
/ 24 марта 2019

Вы были почти рядом.Ваши table_extract_items являются якорями HTML, из которых вам нужно извлечь text - содержимое и атрибут href с использованием операторов [ ].Я думаю, неправильный выбор имени переменной смутил вас.Строка внутри цикла for links = item.find_all('a') неверна!

Вот мое решение:

for anchor in table.findAll('a'):
    # if not anchor: finaAll returns empty list, .find() return None
    #    continue
    href = anchor['href']    
    print (href)
    print (anchor.text)

table в моем коде - это то, что вы назвали table_extract в своем коде

проверьте это:

In [40]: for anchor in table.findAll('a'):
        # if not anchor:
        #        continue
        href = anchor['href']
        text = anchor.text
        print (href, "--", text)
   ....:     
https://imgur.com/a/Y1WlDiK -- 6GB EVGA GTX 980 TI
https://imgur.com/gallery/yxkPF3g -- Intel i7-4790K
https://imgur.com/gallery/nUKnya3 -- Asus Z97-K Motherboard
https://imgur.com/gallery/9YIU19P -- 2x8 HyperX Fury DDR3 RAM
https://imgur.com/gallery/pNqXC2z -- Elagto HD 60 Pro Capture Card
https://imgur.com/gallery/5K3bqMp -- Samsung EVO 250 GB SSD
https://imgur.com/FO8JoQO -- Corsair Scimtar MMO Mouse
https://imgur.com/C8PFsX0 -- Corsair K70 RGB Rapidfire Keyboard
https://imgur.com/hfCEzMA -- I messed up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...