автордың кітабынан сөз тіркестері Современный скрапинг веб-сайтов с помощью Python. 2-е межд. издание
https://github.com/REMitchell/python-scraping.
анализ данных, синтаксический анализ естественных языков и информационная безопасность.
else:
internalLinks.append(link.attrs['href'])
return internalLinks
# Получить список всех внешних ссылок, найденных на странице.
def getExternalLinks(bs, excludeUrl):
externalLinks = []
# Найти все ссылки, которые начинаются с "http" или "www",
# не содержащие текущий URL.
for link in bs.find_all('a',
href=re.compile('^(http|www)((?!'+excludeUrl+').)*$')):
if link.attrs['href'] is not None:
if link.attrs['href'] not in externalLinks:
externalLinks.append(link.attrs['href'])
return externalLinks
def getRandomExternalLink(startingPage):
html = urlopen(startingPage)
bs = BeautifulSoup(html, 'html.parser')
externalLinks = getExternalLinks(bs,
urlparse(startingPage).netloc)
if len(externalLinks) == 0:
print('No external links, looking around the site for one')
domain = '{}://{}'.format(urlparse(startingPage).scheme,
urlparse(startingPage).netloc)
internalLinks = getInternalLinks(bs, domain)
return getRandomExternalLink(internalLinks[random.randint(0,
len(internalLinks)-1)])
else:
return externalLinks[random.randint(0, len(externalLinks)-1)]
def followExternalOnly(startingSite):
externalLink = getRandomExternalLink(startingSite)
print('Random external link is: {}'.format(externalLink))
followExternalOnly(externalLink)
followExternalOnly('http://oreilly.com')
from urllib.request import urlopen
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import re
import datetime
import random
pages = set()
random.seed(datetime.datetime.now())
# Получить список всех внутренних ссылок, найденных на странице.
def getInternalLinks(bs, includeUrl):
includeUrl = '{}://{}'.format(urlparse(includeUrl).scheme,
urlparse(includeUrl).netloc)
internalLinks = []
# найти все ссылки, которые начинаются с "/"
for link in bs.find_all('a',
href=re.compile('^(/|.*'+includeUrl+')')):
if link.attrs['href'] is not None:
if link.attrs['href'] not in internalLinks:
if(link.attrs['href'].startswith('/')):
internalLinks.append(
includeUrl+link.attrs['href'])
Принимая решение о том, какие данные собирать, зачастую лучше игнорировать сайты. Нельзя запустить проект, рассчитанный на то, чтобы стать большим и масштабируемым, посмотрев только на один сайт и спросив себя: «Что здесь есть?» Вместо этого нужно задать другой вопрос: «Что мне нужно?» — а затем найти способы поиска необходимой информации.
Вас могут попросить собрать цены на товары с разных сайтов, чтобы в итоге можно было сравнивать цены на один и тот же товар. Возможно, они будут представлены в разных валютах. Вдобавок, вероятно, потребуется объединить их с внешними данными, полученными из какого-то другого источника, не имеющего отношения к Интернету.
Привычка составлять схемы и диаграммы того, что должен делать код, прежде чем писать его, фантастически полезна. По мере усложнения ваших веб-краулеров она сэкономит вам кучу времени и избавит от многих разочарований.
В Python установлен по умолчанию предел рекурсии (количество рекурсивных вызовов программы), и он равен 1000.
Несмотря на большой разброс оценок, глубокий Интернет почти наверняка составляет около 90 % всего Интернета.
Глубокий Интернет — это любая часть Сети, выходящая за пределы видимого Интернета. Видимой называют ту часть Интернета, которая индексируется поисковыми системами.
