Не удается получить ссылки, связанные с различными участниками на веб-странице - PullRequest
0 голосов
/ 04 января 2019

Я пытался получить ссылки, связанные с различными экспонентами, с этой веб-страницы с использованием скрипта Python, но в результате я ничего не получаю, ошибки тоже нет , Имя класса m-exhibitors-list__items__item__name__link, которое я использовал в своем скрипте, доступно в исходном коде страницы, поэтому они не генерируются динамически.

Какое изменение я должен внести в мой скрипт, чтобы получить ссылки?

Вот что я пробовал:

from bs4 import BeautifulSoup
import requests

link = 'https://www.topdrawer.co.uk/exhibitors?page=1'

with requests.Session() as s: 
    s.headers['User-Agent']='Mozilla/5.0'  
    response = s.get(link)
    soup = BeautifulSoup(response.text,"lxml")
    for item in soup.select("a.m-exhibitors-list__items__item__name__link"):
        print(item.get("href"))

Одна из таких ссылок, которую я ищу (первая):

https://www.topdrawer.co.uk/exhibitors/alessi-1

Ответы [ 2 ]

0 голосов
/ 04 января 2019

@ Жизнь сложна, верно, что сайт, который вы использовали для очистки, защищен Сервисом инкапсула для защиты сайта от слома веб-страниц и других атак, он проверяет заголовок запроса, будь то браузер или робот ( вы или бот), однако, более вероятно, что на сайте есть проприетарные данные, или они могут предотвратить другие угрозы

Однако есть возможность добиться того, чего вы хотите, используя Selenium и BS4. ниже приведен код для вашей справки

from bs4 import BeautifulSoup
from selenium import webdriver
import requests

link = 'https://www.topdrawer.co.uk/exhibitors?page=1'

CHROMEDRIVER_PATH ="C:\Users\XYZ\Downloads/Chromedriver.exe" 

wd = webdriver.Chrome(CHROMEDRIVER_PATH)

response = wd.get(link)

html_page = wd.page_source
soup = BeautifulSoup(html_page,"lxml")
results = soup.findAll("a", {"class" : "m-exhibitors-list__items__item__name__link"})

#interate list of anchor tags to get href attribute
for item in results:
    print(item.get("href"))
wd.quit()  
0 голосов
/ 04 января 2019

Сайт, который вы пытаетесь очистить, защищен программой Incapsula.

target_url = 'https://www.topdrawer.co.uk/exhibitors?page=1'

response = requests.get(target_url, 
headers=http_headers, allow_redirects=True, verify=True, timeout=30)
raw_html = response.text
soupParser = BeautifulSoup(raw_html, 'lxml')

pprint (soupParser.text)

**OUTPUTS**
soupParser = BeautifulSoup(raw_html, 'html')
('Request unsuccessful. Incapsula incident ID: '
'438002260604590346-1456586369751453219')

Прочитайте это: https://www.quora.com/How-can-I-scrape-content-with-Python-from-a-website-protected-by-Incapsula

и эти: https://stackoverflow.com/search?q=Incapsula

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