Ссылки на веб-скребки - PullRequest
       15

Ссылки на веб-скребки

1 голос
/ 25 апреля 2020

Я работаю над очисткой ссылок с сайта фермы рождественских елок. Сначала я использовал этот урок метод , чтобы получить все ссылки. Затем я заметил, что нужные мне ссылки не ведут с правильным протоколом передачи гипертекста, поэтому я создал переменную для объединения. Сейчас я пытаюсь создать оператор if, который захватывает каждую ссылку и ищет любые два символа, за которыми следует «xmastrees. php». Если это правда, то моя конкатенационная переменная в начале. Если ссылка не содержит указанный текст c, она удаляется. Например, NYxmastrees.php будет http://www.pickyourownchristmastree.org/NYxmastrees.php, а ../disclaimer.htm будет удалено. Я пробовал несколько способов, но, похоже, не могу найти правильный.

Вот то, что у меня есть в настоящее время, и я продолжаю сталкиваться с синтаксической ошибкой: del. Я закомментировал эту строку и получил еще одну ошибку, говоря, что мой строковый объект не имеет атрибута 're'. Это смущает меня, потому что я, хотя я мог бы использовать регулярное выражение со строками ??

source = requests.get('http://www.pickyourownchristmastree.org/').text
soup = BeautifulSoup(source, 'lxml')
concatenate = 'http://www.pickyourownchristmastree.org/'

find_state_group = soup.find('div', class_ = 'alert')
for link in find_state_group.find_all('a', href=True):
    if link['href'].re.search('^.\B.\$xmastrees'):
        states = concatenate + link
    else del link['href']
    print(link['href']

Ошибка с else del link['href']:

    else del link['href']
           ^
SyntaxError: invalid syntax

Ошибка без else del link['href']:

    if link['href'].re.search('^.\B.\$xmastrees'):
AttributeError: 'str' object has no attribute 're'

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете попробовать использовать:

import requests
from bs4 import BeautifulSoup as bs

u = "http://www.pickyourownchristmastree.org/"
soup = bs(requests.get(u).text, 'html5lib')

find_state_group = soup.find('div', {"class": 'alert'})
for link in find_state_group.find_all('a', href=True):
    if "mastrees" in link['href']:
        states = u + link['href']
        print(states)

http://www.pickyourownchristmastree.org/ALxmastrees.php
http://www.pickyourownchristmastree.org/AZxmastrees.php
http://www.pickyourownchristmastree.org/AKxmastrees.php
...

Демо

...