很遗憾,我正尝试从网站中提取社交媒体链接以进行研究,但由于它们位于网站的页脚中,因此我无法提取它们。
我尝试了请求,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 。
我花了很多小时试图弄清楚如何提取此页脚信息,但失败了。
所以,我恳请有人能帮助我解决这个问题。
注意: 即使我尝试过正则表达式,问题仍然是当我们下载页面时页脚信息没有被下载。
答案 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']