BeautifulSoup генерирует противоречивые результаты - PullRequest
0 голосов
/ 09 июня 2018

Я использую BeautifulSoup для извлечения данных из боковых панелей Reddit по выбору подредактов, но мои результаты меняются почти каждый раз, когда я запускаю свой скрипт.

В частности, результаты в sidebar_urls меняютсяот итерации к итерации;иногда это приводит к [XYZ.com/abc, XYZ.com/def], иногда оно возвращает просто [XYZ.com/def], и, наконец, иногда возвращается [].

Есть идеи, почему это может происходить с использованием приведенного ниже кода?

sidebar_urls = []

for i in range(0, len(reddit_urls)):
    req = urllib.request.Request(reddit_urls[i], headers=headers)
    resp = urllib.request.urlopen(req)
    soup = BeautifulSoup(resp, 'html.parser')

    links = soup.find_all(href=True)

    for link in links:
        if "XYZ.com" in str(link['href']):
            sidebar_urls.append(link['href'])

1 Ответ

0 голосов
/ 09 июня 2018

Кажется, иногда вы получаете страницу, на которой нет боковой панели.Это может быть потому, что Reddit распознает вас как робота и возвращает страницу по умолчанию вместо той, которую вы ожидаете.Подумайте, как идентифицировать себя при запросе страниц, используя поле User-Agent:

reddit_urls = [
    "https://www.reddit.com/r/leagueoflegends/",
    "https://www.reddit.com/r/pokemon/"
]

# Update this to identify yourself
user_agent = "me@example.com"

sidebar_urls = []
for reddit_url in reddit_urls:
    response = requests.get(reddit_url, headers={"User-Agent": user_agent})
    soup = BeautifulSoup(response.text, "html.parser")

    # Find the sidebar tag
    side_tag = soup.find("div", {"class": "side"})
    if side_tag is None:
        print("Could not find a sidebar in page: {}".format(reddit_url))
        continue

    # Find all links in the sidebar tag
    link_tags = side_tag.find_all("a")
    for link in link_tags:
        link_text = str(link["href"])
        sidebar_urls.append(link_text)

print(sidebar_urls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...