Парсер ссылок средствами Beautifulsoup
Статья будет простая и для кого то будет из разряда «как нарисовать сову», но для меня это неважно, ибо материал все равно кому-нибудь пригодится.
Речь пойдет о библиотеке Beautfulsoup и в качестве искомых данных будут URL адреса на ссылки, которые на языке HTML размечаются как ссылка, для этого будем ловить значения тега и следующего за ним атрибута href.
Импортируем библиотеку requests:
и библиотеку bs4, откуда вызываем объект супа:
from bs4 import BeautifulSoup
url = 'https://yandex.ru/' r = requests.get(url) soup_ing = str(BeautifulSoup(r.content, 'lxml'))
предварительно кодируем переменную soup_ing:
сохраняем контент в файл test.html:
with open("test.html", "wb") as file: file.write(soup_ing)
создаем метод fromSoup, который будет искать ссылки и
открываем сохраненный файл:
def fromSoup(): html_file = ("test.html") html_file = open(html_file, encoding='UTF-8').read() soup = BeautifulSoup(html_file, 'lxml')
создаем объект soup, чтобы передать ему содержание файла:
soup = BeautifulSoup(html_file, 'lxml')
объявляем что поиск пройдет по всем тегам a:
for link in soup.find_all('a'):
и выводя содержимое в виде ссылок:
import requests from bs4 import BeautifulSoup url = 'https://yandex.ru/' r = requests.get(url) soup_ing = str(BeautifulSoup(r.content, 'lxml')) soup_ing = soup_ing.encode() with open("test.html", "wb") as file: file.write(soup_ing) def fromSoup(): html_file = ("test.html") html_file = open(html_file, encoding='UTF-8').read() soup = BeautifulSoup(html_file, 'lxml') # name of our soup for link in soup.find_all('a'): print(link.get('href')) fromSoup()
how to get all page urls from a website
Web scraping is the technique to extract data from a website.
The module BeautifulSoup is designed for web scraping. The BeautifulSoup module can handle HTML and XML. It provides simple method for searching, navigating and modifying the parse tree.
Get links from website
from BeautifulSoup import BeautifulSoup
import urllib2
import re
html_page = urllib2.urlopen(«https://arstechnica.com»)
soup = BeautifulSoup(html_page)
for link in soup.findAll(‘a’, attrs={‘href’: re.compile(«^http://»)}):
print link.get(‘href’)
It downloads the raw html code with the line:
html_page = urllib2.urlopen(«https://arstechnica.com»)
A BeautifulSoup object is created and we use this object to find all links:
soup = BeautifulSoup(html_page)
for link in soup.findAll(‘a’, attrs={‘href’: re.compile(«^http://»)}):
print link.get(‘href’)
Extract links from website into array
from BeautifulSoup import BeautifulSoup
import urllib2
import re
html_page = urllib2.urlopen(«https://arstechnica.com»)
soup = BeautifulSoup(html_page)
links = []
for link in soup.findAll(‘a’, attrs={‘href’: re.compile(«^http://»)}):
links.append(link.get(‘href’))
print(links)
Function to extract links from webpage
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://arstechnica.com») )