Извлечение URL из нижнего колонтитула веб-страницы - PullRequest
0 голосов
/ 17 мая 2019

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

Я пытался запросить, urllib.requestapi, pattern.web для загрузки html-документа веб-страницы.Все эти API-интерфейсы загружают один и тот же контент и не могут загрузить контент в нижний колонтитул сайтов.

import requests
from bs4 import BeautifulSoup as soup 
url = 'https://cloudsight.ai/'
headers = {'User-Agent':'Mozilla/5.0'}
sm_sites = ['https://www.twitter.com','https://www.facebook.com',
                'https://www.youtube.com','https://www.linkedin.com',
                'https://www.linkedin.com/company', 'https://twitter.com',
          'https://facebook.com','https://youtube.com','https://linkedin.com',
                'http://www.twitter.com','http://www.facebook.com',
                'http://www.youtube.com','http://www.linkedin.com',
                'http://www.linkedin.com/company', 'http://twitter.com',
             'http://facebook.com','http://youtube.com','http://linkedin.com']

blocked = ['embed','search','sharer','intent','share','watch']

sm_sites_present = []

r = requests.get(url,headers=headers)
content = soup(r.content,'html.parser')
text = r.text

links = content.find_all('a',href=True)
for link in links:
    a = link.attrs['href'].strip('/')
    try:
        if any(site in a for site in sm_sites) and not any(block in a for block in blocked): 
            sm_sites_present.append(a)
    except:
        sm_sites_present.append(None)

output:
>>> sm_sites_present
>>> []

Если вы видите элемент проверки веб-сайта, информация social_media предоставляется в DOM нижнего колонтитула DOM.

Если вы просто попробуете text.find('footer'), результат будет -1 .

Я много часов пытался выяснить, как извлечь эту информацию из нижнего колонтитула, и у меня не получилось.

ТАК, я прошу любого помочь мне в ее решении.

Примечание. Даже если я попробовал regex, проблема в том, что при загрузке страницы информация нижнего колонтитула не загружается.

1 Ответ

0 голосов
/ 17 мая 2019

Как подсказывает @ chitown88, вы можете использовать Selenium для получения контента.

from selenium import webdriver

url = 'https://cloudsight.ai/'

driver = webdriver.Firefox()
driver.get(url)

html = driver.page_source

driver.quit()

soup = BeautifulSoup(html,'html.parser')
[i.a['href'] for i in soup.footer.find_all('li', {'class':'social-list__item'})]

выход

['https://www.linkedin.com/company/cloudsight-inc',
 'https://www.facebook.com/CloudSight',
 'https://twitter.com/CloudSightAPI']
...