не может получить URL-адреса статей с помощью BeautifulSoup - PullRequest
1 голос
/ 28 мая 2020

Я использую BeautifulSoup для получения URL-адресов статей с этой страницы: https://www.usnews.com/search?q=China+COVID-19&gsc.tab=0&gsc.q=China+COVID-19&gsc.page=1#gsc .tab = 0 & gs c .q = China% 20COVID-19 & gs c .page = 1

Я ожидаю, что все ссылки на статьи должны храниться в виде ссылок на страницы, например:

['https://www.usnews.com/news/health-news/articles/2020-04-08/chinas-controls-may-have-headed-off-700-000-covid-19-cases-study']
['https://www.usnews.com/news/health-news/articles/2020-03-18/trump-dubs-covid-19-chinese-virus-despite-hate-crime-risks']
.......

Но результат дает мне []. Я использовал этот код:

            #parse the content
            soup_page = bs(response.text, 'lxml') 
            #select all the articles for a single page
            #containers = soup_page.findAll("li", {'class': 'usn-site-search-item'})
            containers = soup_page.findAll("div", {'class': 'usn-site-search-item-container'})
            #scrape the links of the articles
            for i in containers:
                url = i.find('a')
                pagelinks.append(url.get('href'))
            print(pagelinks)

Как видите, я пробовал два контейнера, но ни один из них не дал ожидаемых результатов.

Я был бы очень признателен, если бы кто-нибудь мог мне помочь!

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Ответ, который вы получаете, когда вы вызываете вышеупомянутый URL, не содержит ссылок, которые вы ищете. Возможно, вам придется использовать безголовые браузеры, такие как селен ИЛИ кукловод, так как странице требуется javascript для загрузки

Но вы можете использовать этот URL-адрес для получения желаемого результата программируемая поисковая система

Вот небольшой python код:

import requests
import json

headers = {
    "user-agent": <User Agent Goes Here>
}

res = requests.get(url, headers=headers)
json_res = res.text.split("api2768")[1][1:-2]

urls = []
for url in json.loads(json_res)['results']:
    urls.append(url['url'])

PS: Пожалуйста, позаботьтесь о файлах cookie

1 голос
/ 28 мая 2020

Эта веб-страница загружается с JavaScript. Вам нужно go обойти это, и один из способов - использовать Selenium.

from selenium import webdriver
from bs4 import BeautifulSoup

url = "https://www.usnews.com/search?q=China+COVID-19&gsc.tab=0&gsc.q=China+COVID-19&gsc.page=1#gsc.tab=0&gsc.q=China%20COVID-19&gsc.page=1"
driver = webdriver.Chrome()
driver.get(url)

soup = BeautifulSoup(driver.page_source,'lxml')

#the rest of your code here

driver.quit()

Если у вас не установлен пакет Selenium , это команда для запуска в терминале :

pip install selenium
...