填写javascript网站上的登录表单,抓取抓取信息

时间:2020-09-21 08:33:20

标签: python selenium selenium-webdriver web-scraping scrapy

我想要的

嘿朋友们,我必须创建一个蜘蛛,它可以填写登录表单,然后开始抓取。 我知道如何使用scrapy登录,但是在此页面上,它将无法工作,除非我使用硒,这是因为许多JavaScript。 如您所见,我开始在selenium中进行构建,这确实起作用,但是登录后什么也没发生。

我有一个.csv文件作为源,所有内部链接都保存在那里,我只需要打开“链接1”,获取我需要的所有信息,然后“链接2”,依此类推。

域:https://www.duif.nl/

我的草率代码可以正常工作,除非我尝试在没有登录过程的情况下进行爬网,但是它的本质是因为只有登录才能看到某件商品的价格。 我已经成功地刮掉了该页面,所以这确实是我必须采取的最后一步,但我感到绝望

我在这里(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个月前开始学习草木,我真的很想坚持下去。

如果你们中的任何人都知道一种方法,那么完美的是,我将如何在没有硒的情况下做到这一点。

如果你们都缺少一些重要的信息来重建我的问题,请告诉我

0 个答案:

没有答案
相关问题