Я пытаюсь заставить работать сценарий python selenium, который должен делать следующее:
Возьмем текстовый файл BookTitle.txt, который представляет собой список названий книг.
Затем с помощью Python / Selenium выполняется поиск этого заголовка на сайте GoodReads.com.
Принимает URL-адрес результата и создает новый файл .CSV со столбцом 1 = название книги и столбцом 2 = URL-адрес сайта.
Я надеюсь, что мы сможем заставить это работать, а затем, пожалуйста, помогите мне шаг за шагом запустить его.
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.common.exceptions import TimeoutException
from selenium.webdriver.firefox.options import Options
from pyvirtualdisplay import Display
#from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common import keys
import csv
import time
import json
class Book:
def __init__(self, title, url):
self.title = title
self.url = url
def __iter__(self):
return iter([self.title, self.url])
url = 'https://www.goodreads.com/'
def create_csv_file():
header = ['Title', 'URL']
with open('/home/l/gDrive/AudioBookReviews/WebScraping/GoodReadsBooksNew.csv', 'w+', encoding='utf-8') as csv_file:
wr = csv.writer(csv_file, delimiter=',')
wr.writerow(header)
def read_from_txt_file():
lines = [line.rstrip('\n') for line in open('/home/l/gDrive/AudioBookReviews/WebScraping/BookTitles.txt', encoding='utf-8')]
return lines
def init_selenium():
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
options = Options()
options.add_argument('--headless')
global driver
driver = webdriver.Chrome("/home/l/gDrive/AudioBookReviews/WebScraping/chromedriver", chrome_options=chrome_options)
driver.get(url)
time.sleep(30)
driver.get('https://www.goodreads.com/search?q=')
def search_for_title(title):
search_field = driver.find_element_by_xpath('//*[@id="search_query_main"]')
search_field.clear()
search_field.send_keys(title)
search_button = driver.find_element_by_xpath('/html/body/div[2]/div[3]/div[1]/div[1]/div[2]/form/div[1]/input[3]')
search_button.click()
def scrape_url():
try:
url = driver.find_element_by_css_selector('a.bookTitle').get_attribute('href')
except:
url = "N/A"
return url
def write_into_csv_file(vendor):
with open('/home/l/gDrive/AudioBookReviews/WebScraping/GoodReadsBooksNew.csv', 'a', encoding='utf-8') as csv_file:
wr = csv.writer(csv_file, delimiter=',')
wr.writerow(list(vendor))
create_csv_file()
titles = read_from_txt_file()
init_selenium()
for title in titles:
search_for_title(title)
url = scrape_url()
book = Book(title, url)
write_into_csv_file(book)
Выполняя вышеуказанное, я получаю следующие ошибки:
Отслеживание (последний вызов последним): файл "/home/l/gDrive/AudioBookReviews/WebScraping/GoodreadsScraper.py", строка 68, в файле init_selenium () "/home/l/gDrive/AudioBookReviews/WebScraping/GoodreadsScraper.py" , строка 41, в init_selenium driver = webdriver.Chrome ("/ home / l / gDrive / AudioBookReviews / WebScraping / chromedriver", chrome_options = chrome_options) File "/usr/local/lib/python3.6/dist-packages/selenium/ webdriver / chrome / webdriver.py ", строка 81, в файле init desire_capabilities = желаемый_capabilities)" /usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver. py ", строка 157, в файле init self.start_session (возможности, browser_profile)" /usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py " , строка 252, в start_session response = self.execute (Command.NEW_SESSION, parameters) Файл "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", строка 321, в файле execute self.error_handler.check_response (response) "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", строка 242, в check_response вызывает exception_class (сообщение , экран, stacktrace) selenium.common.exceptions.WebDriverException: сообщение: неизвестная ошибка: не удалось запустить Chrome: аварийный выход (неизвестная ошибка: файл DevToolsActivePort не существует) (процесс запущен из местоположения Chrome / usr / bin / google- chrome больше не работает, поэтому ChromeDriver предполагает, что Chrome разбился.) (Информация о драйвере: chromedriver = 2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634), platform = Linux 4.15.0-60-generic x86_64)