Нижний колонтитул скрытия страницы сайта от парсера - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь найти кнопку пожертвования на сайте Университета Британской Колумбии .

Кнопка пожертвования расположена в нижнем колонтитуле страницы, внутри div, классифицируемого как «span7»

Однако, когда соскоблено, html выдает div, в котором ничего нет.

Моя программа отлично работает с прямым источником в качестве источника:

from bs4 import BeautifulSoup as bs
import re

site = '''<div class="span7" id="ubc7-footer-menu"><div class="row-fluid"><div class="span6"><h3>About UBC</h3><div><a href="https://cdn.ubc.ca/clf/ref/contact">Contact UBC</a></div><div><a href="https://cdn.ubc.ca/clf/ref/about">About the University</a></div><div><a href="https://cdn.ubc.ca/clf/ref/news">News</a></div><div><a href="https://cdn.ubc.ca/clf/ref/events">Events</a></div><div><a href="https://cdn.ubc.ca/clf/ref/careers">Careers</a></div><div><a href="https://cdn.ubc.ca/clf/ref/gift">Make a Gift</a></div><div><a href="https://cdn.ubc.ca/clf/ref/search">Search UBC.ca</a></div></div><div class="span6"><h3>UBC Campuses</h3><div><a href="https://cdn.ubc.ca/clf/ref/vancouver">Vancouver Campus</a></div><div><a href="https://cdn.ubc.ca/clf/ref/okanagan">Okanagan Campus</a></div><h4>UBC Sites</h4><div><a href="https://cdn.ubc.ca/clf/ref/robson">Robson Square</a></div><div><a href="https://cdn.ubc.ca/clf/ref/centre-for-digital-media">Centre for Digital Media</a></div><div><a href="https://cdn.ubc.ca/clf/ref/medicine">Faculty of Medicine Across BC</a></div><div><a href="https://cdn.ubc.ca/clf/ref/asia">Asia Pacific Regional Office</a></div></div></div></'''

html = bs(site, 'html.parser')
link = html.find('a', string=re.compile('(?)(donate|donation|gift)')) 

#returns proper donation URL

Однако, использование сайта не работает

from bs4 import BeautifulSoup as bs
import requests
import re

site = requests.get('https://www.ubc.ca/')

html = bs(site.content, 'html.parser')
link = html.find('a', string=re.compile('(?i)(donate|donation|gift)')) 

#returns none

Что-то не так с моим парсером?Это какой-то маневр против царапин?Я обречен?

1 Ответ

0 голосов
/ 01 июня 2018

Я не могу найти кнопку «Пожертвовать» в предоставленном вами URL-адресе, но в вашем синтаксическом анализаторе нет ничего плохого, просто отправленный вами запрос GET дает вам только HTML-код, изначально возвращенный из ответа,вместо ожидания полной визуализации страницы.

Похоже, что части страницы заполнены Javascript.Вы можете использовать Splash , который используется для отображения страниц на основе Javascript.Вы можете довольно просто запустить Splash в Docker и просто отправлять HTTP-запросы в контейнер Splash, который будет возвращать HTML, который выглядит как веб-страница, отображаемая в веб-браузере.

Хотя это звучитСлишком сложный, на самом деле его довольно просто настроить, так как вам вообще не нужно изменять образ Docker, и вам не нужны предварительные знания Docker, чтобы заставить его работать.Для запуска локального сервера Splash требуется всего одна строка из командной строки:
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash

Затем вы просто изменяете любые существующие запросы в вашем коде Python, чтобы вместо этого направлять всплеск:

т.е. http://example.com/ становится
http://localhost:8050/render.html?url=http://example.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...