我想要的
嘿朋友们,我必须创建一个蜘蛛,它可以填写登录表单,然后开始抓取。 我知道如何使用scrapy登录,但是在此页面上,它将无法工作,除非我使用硒,这是因为许多JavaScript。 如您所见,我开始在selenium中进行构建,这确实起作用,但是登录后什么也没发生。
我有一个.csv文件作为源,所有内部链接都保存在那里,我只需要打开“链接1”,获取我需要的所有信息,然后“链接2”,依此类推。
我的草率代码可以正常工作,除非我尝试在没有登录过程的情况下进行爬网,但是它的本质是因为只有登录才能看到某件商品的价格。 我已经成功地刮掉了该页面,所以这确实是我必须采取的最后一步,但我感到绝望
我在这里(google,youtube等)阅读了很多文章,但是似乎都没有一个问题对我有帮助。
在我的脑海里,我的蜘蛛应该走那条路:打开硒浏览器,填写登录表格。现在我们已登录,scrapy应该执行其任务,并向我获取我需要的所有信息。
我的代码
import scrapy
from selenium import webdriver
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import ScrapyloginItem
from scrapy.http import Request, FormRequest
import csv
#Loginprocess with selenium
USERNAME = 'not real'
PASSWORD = 'login data'
driver = webdriver.Chrome('C:\\webdriver\\chromedriver.exe')
driver.get("https://www.duif.nl/login")
login_form = driver.find_element_by_id('login-form')
username = driver.find_element_by_name('username')
username.send_keys(USERNAME)
password = driver.find_element_by_name('password')
password.send_keys(PASSWORD)
login_button = driver.find_element_by_xpath('//input[@class="button black"]')
login_button.click()
class DuifFinish(CrawlSpider):
name = "duifloginpics"
allowed_domains = ['duif.nl']
custom_settings = {'FEED_EXPORT_FIELDS' : ['SKU', 'Title', 'Link', 'Images', 'Stock', 'Desc', 'Title_small' ] }
with open('duifonlylinks.csv', 'r') as f:
reader = csv.DictReader(f)
start_urls = [items['Link'] for items in reader]
rules = (
Rule(
LinkExtractor(),
callback='parse_page',
follow=True
),
)
def start_requests(self):
yield Request(
callback=self.parse,
dont_filter=True
)
def after_login(self, response):
accview = response.xpath('//div[@class="row myaccountrow"]')
if accview:
print('success')
else:
print(':(')
for url in self.start_urls:
yield response.follow(url=url, callback=self.parse_page)
def parse_page(self, response):
productpage = response.xpath('//div[@class="product-details col-md-12"]')
if not productpage:
print('No productlink', response.url)
for a in productpage:
items = ScrapyloginItem()
items['SKU'] = response.xpath('//p[@class="desc"]/text()').get()
items['Title'] = response.xpath('//h1[@class="product-title"]/text()').get()
items['Link'] = response.url
items['Images'] = response.xpath('//div[@class="inner"]/img/@src').getall()
items['Stock'] = response.xpath('//div[@class="desc"]/ul/li/em/text()').getall()
items['Desc'] = response.xpath('//div[@class="item"]/p/text()').getall()
items['Title_small'] = response.xpath('//div[@class="left"]/p/text()').get()
yield items
我想念蜘蛛那部分工作吗? Selenium是处理javascript的最好方法吗?自从我大约1个月前开始学习草木,我真的很想坚持下去。
如果你们中的任何人都知道一种方法,那么完美的是,我将如何在没有硒的情况下做到这一点。
如果你们都缺少一些重要的信息来重建我的问题,请告诉我