У меня есть следующий код, который очищает вопросы от переполнения стека. Я использовал tagName
локатор, чтобы очистить сайт. Тем не менее, он удалил все внутри одного тега, который включает в себя вещи, которые не нужны. Как это ограничить?
Например, если я хочу получить только вопросы только в теге h1, скребок скребет вопросы с именем stackoverflow
веб-сайта также в теге h1. Как заставить их соскребать только вопросы в указанном теге c?
Вот мой код, который очищает все внутри тега. Как ограничить это:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pandas as pd
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
def to_do():
# vars...
csv_file_location = r"C:\Users\intel\Desktop\data_file.csv"
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) ' \
'Chrome/80.0.3987.132 Safari/537.36'
driver_exe = 'chromedriver'
options = Options()
options.add_argument("--headless")
options.add_argument(f'user-agent={user_agent}')
options.add_argument("--disable-web-security")
options.add_argument("--allow-running-insecure-content")
options.add_argument("--allow-cross-origin-auth-prompt")
url = "https://stackoverflow.com/questions"
driver = webdriver.Chrome(executable_path=r"C:\Users\intel\Downloads\setups\chromedriver.exe", options=options)
driver.get(url)
one_ = "A"
two_ = "DIV"
three_ = "A"
try:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, one_))
)
elements_1 = driver.find_elements_by_css_selector(one_)
web_content_list = []
for ele in elements_1:
web_content_dict = {}
web_content_dict["Title"] = ele.text
web_content_list.append(web_content_dict)
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, two_))
)
elements_2 = driver.find_elements_by_css_selector(two_)
for ele2 in elements_2:
web_content_dict = {}
web_content_dict["Title2"] = ele2.text
web_content_list.append(web_content_dict)
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, three_))
)
elements_3 = driver.find_elements_by_css_selector(three_)
for ele3 in elements_3:
web_content_dict = {}
web_content_dict["Title3"] = ele3.text
web_content_list.append(web_content_dict)
df = pd.DataFrame(web_content_list)
new_df = pd.DataFrame({'Column 1': df['Title'].dropna(),
'Column 2': df['Title2'].dropna(),
'Column 3': df['Title3'].dropna()})
new_df.to_csv(csv_file_location,
index=False, mode='a', encoding='utf-8')
try:
f = open(csv_file_location)
print("Done !!!\n"*3)
except IOError:
print("File not accessible")
finally:
f.close()
driver.quit()
except:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, one_))
)
elements_1 = driver.find_elements_by_css_selector(one_)
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, two_))
)
elements_2 = driver.find_elements_by_css_selector(two_)
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, three_))
)
elements_3 = driver.find_elements_by_css_selector(three_)
df = pd.DataFrame({
"Title1" : [ele for ele.text in elements_1],
"Title2" : [ele2 for ele2.text in elements_2],
"Title3" : [ele3 for ele3.text in elements_3],
})
df.to_csv(csv_file_location,
index=False, mode='w', encoding='utf-8')
try:
f = open(csv_file_location)
print("Done !!!\n"*3)
# Do something with the file
except IOError:
print("File not accessible")
finally:
f.close()
driver.quit()
finally:
print("start")
if __name__ == "__main__":
to_do()
Любая помощь будет оценена ...