我正在编写一个代码,我需要从特定网站获取所有链接/URL,但是,这些链接似乎是动态生成的,并且可能在获取初始 HTML 后使用 JavaScript 或其他一些动态内容加载机制进行填充.
最初,我使用了以下代码:
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com/'
reqs = requests.get(url)
soup = BeautifulSoup(reqs.text, 'html.parser')
urls = []
for link in soup.find_all('a'):
print(link.get('href'))
但是,这种方法不起作用,因为链接不是直接写在 HTML 中。相反,它们是稍后使用 JavaScript 代码生成的。如何提取这些动态生成的链接? 一个简单的提示将不胜感激。
您是对的,HTML 不包含链接,因此您需要一种方法,让 JavaScript 在抓取页面之前运行。我喜欢 selenium webdriver 和 chromedriver
from bs4 import BeautifulSoup
from selenium import webdriver
url = 'https://www.example.com/'
driver = webdriver.Chrome() # Open an automated browser
driver.get(url) # Navigate to target page
soup = BeautifulSoup( # Parse content _after_ any dynamic javascript stuff
DRIVER.page_source,
'html.parser'
)
urls = []
for link in soup.find_all('a'):
print(link.get('href'))