网站:https://www.wingsforlife.com/uk/
我正在努力从上述网站上抓取文章标题和链接。标题名称的示例包括“推动治愈的新颖资助模式”、“265,818 次谢谢!”和“暑期学校回来了”。它们位于“故事”部分下方。
我为每个网站都有一个字典,其中包含各种网站元素的选择器,然后我在稍后的函数中使用它来抓取信息。该功能的工作原理是我从其他网站提取了文章,因此这与该网站的选择器有关。
sites = {
"Stories_Wings_for_Life": {
"parent_url": "https://www.wingsforlife.com/uk/",
"title_selector": "div.rail-slider__slide--active p.font-medium",
"link_to_article": "div.rail-slider__slide--active > a",
}
}
我问过chatgpt,它似乎认为上面的选择器也很好,所以它似乎是该网站特定的东西(因此我没有发布我的代码)。知道出了什么问题吗?
如果您认为需要我的代码,请告诉我!谢谢。
您尝试抓取的页面很大程度上是由 JavaScript 驱动的。处理此问题的通用模块(您需要导入)是 selenium
使用selenium,您可以获得如下文章标题:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver import ChromeOptions
def text(e, strip=True):
if not (r := e.text):
if (r := e.get_attribute("textContent")) is None:
return ""
return r.strip() if strip else r
URL = "https://www.wingsforlife.com/uk/"
options = ChromeOptions()
options.add_argument("--headless=true")
with webdriver.Chrome(options) as driver:
driver.get(URL)
wait = WebDriverWait(driver, 10)
selector = By.CSS_SELECTOR, "div.w-full article.h-full"
for article in wait.until(EC.presence_of_all_elements_located(selector)):
p = article.find_element(By.CSS_SELECTOR, "div p")
print(text(p))