Поиск подстроки в ссылке - PullRequest
       15

Поиск подстроки в ссылке

1 голос
/ 06 января 2020

Итак, в моей функции Python я передаю URL-адрес, ищу pdf-файлы по этому URL-адресу и затем загружаю эти файлы. В большинстве случаев это работает отлично.

def get_pdfs(my_url):
    html = urllib2.urlopen(my_url).read()
    html_page = BeautifulSoup(html)
    current_link = ''
    links = []
    for link in html_page.find_all('a'):
        current_link = link.get('href')
        if current_link.endswith('pdf'):
            print(current_link)
            links.append(my_url + current_link)
    #print(links)

    for link in links:
        #urlretrieve(link)
        wget.download(link)


get_pdfs('https://grader.eecs.jacobs-university.de/courses/320241/2019_2/')

Однако, когда я пытаюсь использовать свою функцию для определенного веб-сайта курса, мой current_link равен

/courses/320241/2019_2/lectures/lecture_7_8.pdf

, хотя это должно быть обнаружено автоматически & должно быть только

lectures/lecture_7_8.pdf

, тогда как исходный my_url, который я передал функции, был

https://grader.eecs.jacobs-university.de/courses/320241/2019_2/

, так как я добавляю их обоих, и часть ссылки повторяется загруженные файлы повреждены. Как я могу проверить current_link, повторяется ли какая-либо часть из my_url, и если да, как я могу удалить ее перед загрузкой?

1 Ответ

1 голос
/ 06 января 2020

Обновление с использованием urljoin из urllib.parse выполнит работу:

import urllib.parse import urljoin

def get_pdfs(my_url):
    html = urllib2.urlopen(my_url).read()
    html_page = BeautifulSoup(html)
    current_link = ''
    links = []
    for link in html_page.find_all('a'):
        current_link = link.get('href')
        if current_link.endswith('pdf'):
            print(current_link)
            links.append(urljoin(my_url, current_link))
    #print(links)

    for link in links:
        #urlretrieve(link)
        wget.download(link)

Упрощенный метод, .select('a[href$=pdf]') выберите все ссылки, в которых href заканчивается pdf:

import urllib.parse import urljoin

def get_pdfs(my_url):
    html = urllib2.urlopen(my_url).read()
    html_page = BeautifulSoup(html)
    [wget.download(urljoin(my_url, link.get('href'))) for link in html_page.select('a[href$=pdf]')]
...