Почему мой код не может быть удален с этой веб-страницы

#python #web-scraping

Вопрос:

Поэтому я пытаюсь создать веб-страницу с этой страницы, используя beautifulsoup на python https://journals.sagepub.com/toc/CPS/current

Моя главная цель состояла бы в том, чтобы очистить названия всех статей, которые там появляются. После проверки структуры проверки страницы я получил этот код:

 url = "https://journals.sagepub.com/toc/CPS/current"
req = Request(url, headers = { "User-Agent": "Mozilla/5.0"})
webpage = urlopen(req).read()
page_soup = BeautifulSoup(webpage,"html.parser")
nameList = page_soup.findAll("h3", {"class":"heading-title"})
List = []
for name in nameList:
    List.append(name.get_text())
nameList

 

Однако по какой-то причине мой новый список всегда кажется пустым. Я использовал этот подход для других страниц и получил хорошие результаты, поэтому я не уверен, чего здесь не хватает.

Есть какие-нибудь идеи?

Комментарии:

1. К вашему сведению, это скребок скребок , скребок , скребок ), а не лом. «Сдать в утиль» означает выбросить, как мусор 🙁

Ответ №1:

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

Этот код

 import requests
import bs4

# version
print("Requests: {}".format(requests.__version__))
print("Beautiful Soup: {}".format(bs4.__version__))

# soup object
link = "https://journals.sagepub.com/toc/CPS/current"
result = requests.get(link)
soup = bs4.BeautifulSoup(result.content, 'lxml')

# parse for the heading titles
article_names = []
foo = soup.find_all('span', class_='hlFld-Title')
for it in foo:
    print(it.text)
    article_names.append(it.text)
 

очень похоже на ваше, с той лишь разницей, что я анализирую теги span внутри тега, а ваш код анализируется для самого тега.

Вывод кода выглядит следующим образом:

 Requests: 2.25.1
Beautiful Soup: 4.9.3

When Does the Public Get It Right? The Information Environment and the 
Accuracy of Economic Sentiment

Does Affirmative Action Work? Evaluating India’s Quota System

Legacies of Resistance: Mobilization Against Organized Crime in Mexico

Political Institutions and Coups in Dictatorships

Generous to Workers ≠ Generous to All: Implications of European 

Unemployment Benefit Systems for the Social Protection of Immigrants

Drinking Alone: Local Socio-Cultural Degradation and Radical Right 
Support—The Case of British Pub Closures
 

Я надеюсь, что это то, ради чего ты стреляешь.

Ответ №2:

Похоже, у этого urllib есть проблема с получением правильного результата с сервера. Попробуйте requests модуль, он более способен:

 import requests
from bs4 import BeautifulSoup

url = "https://journals.sagepub.com/toc/CPS/current"
req = requests.get(url)
page_soup = BeautifulSoup(req.content, "html.parser")
nameList = page_soup.findAll("h3", {"class": "heading-title"})
List = []
for name in nameList:
    List.append(name.get_text())
print(List)
 

С принтами:

 [
    "When Does the Public Get It Right? The Information Environment and the Accuracy of Economic Sentiment",
    "Does Affirmative Action Work? Evaluating India’s Quota System",
    "Legacies of Resistance: Mobilization Against Organized Crime in Mexico",
    "Political Institutions and Coups in Dictatorships",
    "Generous to Workers ≠ Generous to All: Implications of European Unemployment Benefit Systems for the Social Protection of Immigrants",
    "Drinking Alone: Local Socio-Cultural Degradation and Radical Right Support—The Case of British Pub Closures",
]
 

Ответ №3:

curl -v https://journals.sagepub.com/toc/CPS/current показывает, что страница возвращает 302 перенаправление на страницу. urllib не будет следовать перенаправлениям, и он вернет вам ответ с просьбой перенаправить, в котором не будет нужного вам контента.

Андрей Кесели опубликовал ответ, в котором используется библиотека reqwests, которая выполняет автоматическое перенаправление.