Я уже прочитал различные статьи по моей проблеме, но она все еще не работает.По сути, я использую Scrapy и Selenium для сканирования сайтов.URL-адреса для этого веб-сайта в настоящее время сохраняются в текстовом файле.Этот текстовый файл состоит только из одного столбца.В каждой строке этого столбца есть URL.
Я все еще получаю сообщение об ошибке: selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: 'url' must be a string
Это мой текущий код:
class AlltipsSpider(Spider):
name = 'alltips'
allowed_domains = ['blogabet.com']
def start_requests(self):
with open ("urls.txt", "rt") as f:
start_urls = [l.strip() for l in open('urls.txt').readlines()]
self.driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
self.driver.get(start_urls)
self.driver.find_element_by_id('currentTab').click()
[ ОБНОВЛЕНО ]
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Spider
from selenium import webdriver
from scrapy.selector import Selector
from scrapy.http import Request
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import re
import csv
class AlltipsSpider(Spider):
name = 'alltips'
allowed_domains = ['blogabet.com']
def start_requests(self):
self.driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
with open("urls.txt", "rt") as f:
start_urls = [l.strip() for l in f.readlines()]
self.driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
for url in start_urls:
self.driver.get(url)
self.driver.find_element_by_id('currentTab').click()
sleep(3)
self.logger.info('Sleeping for 5 sec.')
self.driver.find_element_by_xpath('//*[@id="_blog-menu"]/div[2]/div/div[2]/a[3]').click()
sleep(7)
self.logger.info('Sleeping for 7 sec.')
yield Request(self.driver.current_url, callback=self.crawltips)
def crawltips(self, response):
sel = Selector(text=self.driver.page_source)
allposts = sel.xpath('//*[@class="block media _feedPick feed-pick"]')
for post in allposts:
username = post.xpath('.//div[@class="col-sm-7 col-lg-6 no-padding"]/a/@title').extract()
publish_date = post.xpath('.//*[@class="bet-age text-muted"]/text()').extract()
yield{'Username': username,
'Publish date': publish_date
}