Веб-сайт, который я пытаюсь очистить, изменяет теги / идентификаторы, основываясь на том, обнаруживает ли он сканер.Есть ли способ избежать этого? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь написать простой веб-скребок, который просматривает форум, заходит в каждое сообщение, а затем проверяет, есть ли в сообщении какие-либо ссылки на github и хранит эти ссылки.Я делаю это в рамках своего исследования, чтобы увидеть, как люди используют и реализуют процедуры Smart Device.

Я довольно новичок в изучении веб-страниц и использую BeautifulSoup, но столкнулся со странной проблемой.Во-первых, моя программа:

from bs4 import BeautifulSoup
import requests
from user_agent import generate_user_agent

url = 'https://community.smartthings.com/c/projects-stories'

headers = {'User-Agent': generate_user_agent(device_type="desktop", os=('linux'))}
page_response = requests.get(url, timeout=5, headers=headers)

page = requests.get(url, timeout = 5)
#print(page.content)
if page.status_code == 200:
    print('URL: ', url, '\nRequest Successful!')
content = BeautifulSoup(page.content, 'html.parser')
print(content.prettify())

project_url = []
for i in content:
    project_url += content.find_all("/div", class_="a href")
print(project_url)

То, что я сейчас пытаюсь сделать, - это просто собрать все URL-ссылки на каждый отдельный пост на сайте.Когда я пытаюсь сделать это, он возвращает пустой список.После некоторых экспериментов в попытке выбрать конкретный URL-адрес на основе его идентификатора, я обнаружил, что хотя идентификатор каждого сообщения, кажется, не меняется каждый раз при перезагрузке страницы, он меняется, если веб-сайт обнаруживает, что используется скребок,Я полагаю, что это учитывая, что, когда содержимое веб-страницы выводится на консоль, в конце данных HTML появляется раздел, который гласит:

  <!-- include_crawler_content? -->
  </div>
  <footer class="container">
   <nav class="crawler-nav" itemscope="" itemtype="http://schema.org/SiteNavigationElement">
    <a href="/">
     Home
    </a>
    <a href="/categories">
     Categories
    </a>
    <a href="/guidelines">
     FAQ/Guidelines
    </a>
    <a href="/tos">
     Terms of Service
    </a>
    <a href="/privacy">
     Privacy Policy
    </a>
   </nav>

Сайт обнаруживает сканер и изменяет его.навигация, основанная на этом.Я пытался создать новый user_agent, чтобы обмануть его, но мне не повезло.

Есть идеи?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы могли бы начать с использования

content.findChildren('a')

, а затем перейти к отбору результатов поиска по нужным ссылкам.

...