Для получения «дополнительного кредита» в классе для начинающих в Python, который я беру, я хотел извлечь данные из URL с помощью регулярных выражений.Я знаю, что есть и другие способы, которыми я мог бы это сделать, но моему регулярному выражению крайне нужна работа, поэтому ...
По заданному URL-адресу найдите x-ное вхождение href на странице и используйте егоссылка, чтобы перейти на уровень ниже.Промойте и повторяйте, пока я не найду нужную ссылку на странице на запрашиваемой глубине на сайте.
Я использую Python 3.7 и Beautiful Soup 4. В начале программы, после того, как вся уборка сделана, у меня есть:
starting_url = 'http://blah_blah_blah_by_Joe.html'
extracted_name = re.findall('(?<=by_)([a-zA-Z0-9]+)[^.html]*', starting_url)
selected_names.append(extracted_name)
# Just for testing purposes
print(selected_name) [['Joe']]
Хм, немного странноне ожидал вложенного списка, но я знаю, как сгладить список, так что хорошо.Давайте продолжим.
Я пробираюсь через пару циклов, открывая каждый URL для следующего уровня, используя:
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
tags = soup('a')
Продолжить обработку и в цикле, где программадолжен был найти нужную мне ссылку:
# Testing to check I have found the correct href
print(desired_link) <a href="http://blah_blah_blah_by_Mary.html">blah
blah</a>
type(desired_link) bs4.element.tag
Правильная ссылка, но новый для меня «тип», а не то, что я могу использовать re.findall.Итак, больше исследований, и я обнаружил:
for link in soup.find_all('a') :
tags = link.get('href')
type(tags) str
print(tags)
http://blah_blah_blah_by_George.html
http://blah_blah_blah_by_Bill.html
http://blah_blah_blah_by_Mary.html
etc.
Правильный тип, но когда я смотрю на то, что напечатано, я думаю, что я смотрю, может быть, только одна длинная строка?И мне нужен способ просто назначить третий href в строке переменной, которую я могу использовать в re.findall ('regex expression', required_link).
Время обратиться за помощью, я думаю.
И, пока мы находимся, есть идеи, почему я получаю вложенный список в первый раз, когда я использовал re.findall с регулярным выражением?
Пожалуйста, дайте мне знать, как улучшить этот вопростак что стало яснее, что я сделал и что я ищу (я ЗНАЮ, что вы, ребята, без меня об этом даже не спросите).