Использование Python для получения определенных c URL-адресов с веб-страницы (списки Multireddit) - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь провести статистический анализ мультиреддитов на основе topi c. Вместо того, чтобы собирать каждый отдельный субреддит вручную, я нашел веб-сайты, которые собирают эти субреддиты ( Пример , Пример 2 ).

Эти сайты, к сожалению, не имеют возможности загружать список субреддитов в виде открытого текста, который можно использовать в словаре. Есть ли специальный метод c, который я мог бы использовать для очистки этих сайтов, чтобы получить обратно только URL-адрес каждой прикрепленной гиперссылки на веб-странице?

Спасибо!

Изменить: вот мой текущий код

Вот мой текущий код, который работает, но возвращает каждый URL.

import requests

from bs4 import BeautifulSoup

import pandas as pd

url = "https://snoopsnoo.com/subreddits/travel/"

page = requests.get(url)

data = page.text

soup = BeautifulSoup(data)

links = []

for link in soup.find_all('a'):

    reddit = link.get('href')

    links.append(reddit)


df = pd.DataFrame(links, columns=['string_values'])

df.to_csv('travel.csv')

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Да есть такой способ. Если вы используете Python, широко используемой библиотекой является Beautifulsoup. Эта библиотека анализирует HTML напрямую, поэтому не требуется веб-драйвер или запуск веб-браузера в фоновом режиме, как с селеном. Вы можете установить его с помощью: pip install bs4.

Для вашего первого примера сайта:

import urllib
from bs4 import BeautifulSoup

# Load the url
url = "https://snoopsnoo.com/subreddits/travel/"
html = urllib.request.urlopen(url).read()
# Create the parser object
soup = BeautifulSoup(html)

# Find all panel headings
panels = soup.find_all(class_="panel-heading big")
# Find the <a>-elements and exctract the link
links = [elem.find('a')['href'] for elem in panels]
print(links)

Здесь я проверил содержимое страницы, чтобы найти элементы панели по классам, а затем извлек <a> -elements и его атрибут href.

1 голос
/ 19 июня 2020

Этот код захватит все заголовки.

from selenium import webdriver

firefox_options = webdriver.FirefoxOptions()
#firefox_options.add_argument('--headless')

driver = webdriver.Firefox(executable_path='geckodriver.exe', firefox_options=firefox_options)
driver.get("https://snoopsnoo.com/subreddits/travel/")
for i in range(3):
    wds = driver.find_elements_by_class_name('title')
    for wd in wds:
        print(wd.text)
    driver.find_element_by_xpath('/html/body/div/div[2]/div[1]/ul/li/a').click
    print('next page')

driver.close()

Измените 3 на , сколько страниц вы хотите в for i in range(3): Раскомментируйте firefox_options.add_argument('--headless'), чтобы использовать режим без заголовка

...