#python #selenium #selenium-webdriver #web-scraping
#python #selenium #selenium-webdriver #очистка веб-страниц
Вопрос:
Я часами пытался разобраться в этом, но не смог этого сделать.
Вот мой скрипт, использующий Selenium Webdriver на Python, пытающийся извлечь заголовок, дату и ссылку. Я могу извлечь заголовок и ссылку. Однако я застрял при извлечении даты. Не мог бы кто-нибудь, пожалуйста, помочь мне с этим. Очень признателен за ваш ответ.
import selenium.webdriver
import pandas as pd
frame=[]
url = "https://www.oric.gov.au/publications/media-releases"
driver = selenium.webdriver.Chrome("C:/Users/[Computer_Name]/Downloads/chromedriver.exe")
driver.get(url)
all_div = driver.find_elements_by_xpath('//div[contains(@class, "ui-accordion-content")]')
for div in all_div:
all_items = div.find_elements_by_tag_name("a")
for item in all_items:
title = item.get_attribute('textContent')
link = item.get_attribute('href')
date =
frame.append({
'title': title,
'date': date,
'link': link,
})
dfs = pd.DataFrame(frame)
dfs.to_csv('myscraper.csv',index=False,encoding='utf-8-sig')
Вот HTML, который меня интересует:
<div id="ui-accordion-1-panel-0" ...>
<div class="views-field views-field-title">
<span class="field-content">
<a href="/publications/media-release/ngadju-corporation-emerges-special-administration-stronger">
Ngadju corporation emerges from special administration stronger
</a>
</span>
</div>
<div class="views-field views-field-field-document-media-release-no">
<div class="field-content"><span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="2020-07-31T00:00:00 10:00">
31 July 2020
</span> (MR2021-06)</div>
</div>
</div>
...
Комментарии:
1. Дайте мне ссылку на веб-страницу, с которой вы пытаетесь ее извлечь, и тогда я мог бы попытаться вам помочь.
2. Привет @Эдоардо Россо, это ссылка oric.gov.au/publications/media-releases . Большое спасибо за вашу помощь!
3. @EdoardoRosso html был добавлен к вопросу для удобства
Ответ №1:
Сначала я бы получил все строки.
from pprint import pprint
import selenium.webdriver
frame = []
url = "https://www.oric.gov.au/publications/media-releases"
driver = selenium.webdriver.Chrome()
driver.get(url)
divs = driver.find_elements_by_css_selector('div.ui-accordion-content')
for div in divs:
rows = div.find_elements_by_css_selector('div.views-row')
for row in rows:
item = row.find_element_by_tag_name('a')
title = item.get_attribute('textContent')
link = item.get_attribute('href')
date = row.find_element_by_css_selector(
'span.date-display-single').get_attribute('textContent')
frame.append({
'title': title,
'date': date,
'link': link,
})
driver.quit()
pprint(frame)
print(len(frame))
Ответ №2:
Хорошо, просто найдите <span
> со свойством dc:date
, сохраните его в WebElement dateElement и возьмите его текст dateElement.text
. Это ваша дата в виде строки.
Комментарии:
1. Большое спасибо за вашу помощь! С моей стороны это хорошо работает!