Соскребание HTML с помощью BeautifulSoup - PullRequest
0 голосов
/ 15 марта 2019

Я хотел бы выполнить очистку на следующем веб-сайте, хранилище дел: https://engagements.ceres.org/?_ga=2.157917299.852607976.1552678391-697747477.1552678391

Функции, предназначенные для извлечения:

«Организация», «Промышленность»"," Заголовок "," Filed_By "," Статус, Год "," Сводка "(основной текст)

Мой вопрос заключается в том, как мне просмотреть каждый случай и выполнить цикл программы через всестраницы?

URL в моем коде - это только первый случай, но мне нужно перебрать все страницы в хранилище (88 страниц) и записать их в CSV

Мне интересно, если использовать лямбдубудет работать в этом случае

Также может кто-то любезно пролить свет на то, как понимать и идентифицировать шаблоны в HTML-тегах для будущего использования, потому что я новичок в этом поле.

Следующий кодчто у меня на данный момент:

url = "https://engagements.ceres.org/ceres_engagementdetailpage?recID=a0l1H00000CDy78QAD"

page = requests.get(url, verify=False)

soup = BeautifulSoup(page.text, 'html.parser')

1 Ответ

0 голосов
/ 16 марта 2019

Я думаю, вам нужно объединить bs с селеном, так как некоторое содержимое загружается немного медленнее.Вы можете использовать bs, чтобы получить исходные ссылки, а затем использовать селен и ждать, чтобы убедиться, что контент на каждой странице загружен.Сначала нужно решить проблему с сертификатом.

Я не уверен, что это за сводка, поэтому я предоставляю все теги p.Это означает некоторую дублированную информацию.Вы можете уточнить это.

import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

baseUrl = 'https://engagements.ceres.org'
results = []
driver = webdriver.Chrome()

r = requests.get('https://engagements.ceres.org/?_ga=2.157917299.852607976.1552678391-697747477.1552678391', verify=False)
soup = bs(r.content, 'lxml')
items =  [baseUrl + item['href'] for item in soup.select("[href*='ceres_engagementdetailpage?recID=']")]

for item in items:
    driver.get(item)
    WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "p")))
    title = driver.find_element_by_css_selector('.resolutionsTitle').text
    organisation = driver.find_element_by_css_selector('#description p').text
    year = driver.find_element_by_css_selector('#description p + p').text
    aList = driver.find_elements_by_css_selector('.td2')
    industry = aList[0].text
    filedBy = aList[2].text
    status = aList[5].text
    summary = [item.text for item in driver.find_elements_by_css_selector('#description p')]
    results.append([organization, industry, title, filedBy, status, year, summary])
df = pd.DataFrame(results, headers = ['Organization', 'Industry', 'Title', 'Filed By', 'Status', 'Year', 'Summary'])
print(results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...