【发布时间】:2020-01-10 17:42:06
【问题描述】:
我正在尝试让 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)
运行上面的,我得到以下错误:
Traceback(最近一次调用最后一次):文件 "/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) 文件 "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/chrome/webdriver.py", 第 81 行,在 init 中 desired_capabilities=desired_capabilities)文件“/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 157 行,在 init 中 self.start_session(capabilities, browser_profile) 文件“/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 252 行,在 start_session 中 response = self.execute(Command.NEW_SESSION,参数)文件“/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 321 行,在执行中 self.error_handler.check_response(response) 文件 "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", 第 242 行,在 check_response 中 引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.WebDriverException:消息:未知错误: Chrome 无法启动:异常退出(未知错误: DevToolsActivePort 文件不存在)(进程从 chrome location /usr/bin/google-chrome 不再运行,所以 ChromeDriver 假设 Chrome 已崩溃。)(驱动程序信息: 铬驱动程序=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),平台=Linux 4.15.0-60-通用 x86_64)
【问题讨论】:
-
请检查您的代码并再次复制/粘贴,有一些重复的内容。
-
谢谢,是的,我已经粘贴了两次,已修复。
标签: python selenium web-scraping selenium-chromedriver