#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, которая выполняет автоматическое перенаправление.