Получение URL-адресов со страницы, а также со следующих страниц - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь получить все URL-ссылки со страницы. Я использую эту ссылку

https://www.horizont.net/suche/?OK=suchen&OK=suchen&i_sortfl=pubdate&i_sortd=desc&i_q=der

Эта ссылка основана на поисковом запросе, который показывает различные статьи. На каждой странице около 9 статей. Поэтому я хотел бы получить все URL-ссылки в виде списка со страницы.

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

enter image description here

Итак, есть около 15194 страниц, поэтому я хотел бы получить все гиперссылки на статьи со страниц. .

Пока я пытаюсь сделать это:

from BeautifulSoup import BeautifulSoup
import urllib2
import re

def getLinks(url):
    html_page = urllib2.urlopen(url)
    soup = BeautifulSoup(html_page)
    links = []

    for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
        links.append(link.get('href'))

    return links

print( getLinks("https://www.horizont.net/suche/?OK=suchen&OK=suchen&i_sortfl=pubdate&i_sortd=desc&i_q=der") )

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

1 Ответ

1 голос
/ 11 ноября 2019

Вы можете использовать атрибут класса элемента ссылки, которая вам нужна для извлечения href:

for link in soup.findAll ('a', attrs = {'href': re.compile ("^ http: //")}, class _ = "ArticleTeaserSearchResultItem_link"):

И если вы собираетесь просмотреть все страницы и собрать все ссылки на статьи, я могусоветуем вам изменить значение страницы в самой ссылке, пока ссылка не станет действительной:

i = 1
urls = []
while True:

    url = f"https://www.horizont.net/suche/?OK=1&i_q=der&i_sortfl=pubdate&i_sortd=desc&currPage={i}"
    try:
        def getLinks(url):
            html_page = urllib2.urlopen(url)
            soup = BeautifulSoup(html_page)
            links = []

            for link in soup.findAll('a', attrs={'href': re.compile("^http://")}, class_="ArticleTeaserSearchResultItem_link"):
                links.append(link.get('href'))

            return links

    urls.append(getLinks(url))

    except:
        break

    i += 1

В настоящее время у меня нет возможности отлаживать свой код, но я надеюсь, что помог вам. Удачи!

...