从网页的页脚中提取网址

时间:2019-05-17 10:04:19

标签: python python-3.x web-scraping beautifulsoup python-requests

很遗憾,我正尝试从网站中提取社交媒体链接以进行研究,但由于它们位于网站的页脚中,因此我无法提取它们。

我尝试了请求,urllib.request和pattern.web api来下载网页的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
>>> []

如果您看到网站检查元素,则在页脚div DOM中提供了social_media信息。

如果您只尝试text.find('footer'),则结果为-1

我花了很多小时试图弄清楚如何提取此页脚信息,但失败了。

所以,我恳请有人能帮助我解决这个问题。

注意: 即使我尝试过正则表达式,问题仍然是当我们下载页面时页脚信息没有被下载。

1 个答案:

答案 0 :(得分:0)

按照@ 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']