如何解决Scrapy登录,但不爬行任何内容
简介
我的搜寻器终于设法登录了,但它不会进行任何抓取,而且我也找不到原因。 我的控制台输出未显示任何错误,几周前我为跟踪每个内部链接做了一个爬虫,所以我考虑过,我只需要构建几乎相同的爬虫,但是是的,我在这里:>
我的XPath表达式应该正确/必须正确,因为我开始在该域中“学习”爬网
我以为我必须选择CrawlSpider
而不是scrapy.Spider
,但是如果我将规则更改为Linkextractor(r'/a-')
,则
我的代码
import scrapy
from scrapy.spiders import CrawlSpider,Rule
from scrapy.http import Request,FormRequest
from scrapy.utils.response import open_in_browser
from scrapy.linkextractors import LinkExtractor
from ..items import ScrapyloginItem
class TopartLoginIn(CrawlSpider):
name = "test123"
allowed_domains = ['topart-online.com']
login_page = 'https://www.topart-online.com/de/Login/p-Login'
start_urls = ['https://www.topart-online.com/']
rules = (
Rule(
LinkExtractor(),callback='parse_page',follow=True
),)
def start_requests(self):
yield Request(
url=self.login_page,callback=self.login,dont_filter=True
)
def login(self,response):
return FormRequest.from_response(
response,formdata={
'ff_4d4d375f4c6f67696e5f55736572' : 'not real','ff_4d4d375f4c6f67696e5f50617373' : 'login data','ff_4d4d375f4c6f67696e' : ""
},callback=self.parse_page)
def after_loging(self,response):
open_in_browser(response)
accview = response.xpath('//div[@class="myaccounticons row text-center"]')
if accview:
print('success')
else:
print(':(')
for url in self.start_urls:
yield Request(url=url,callback=self.parse_page)
def parse_page(self,response):
productpage = response.xpath('//button[@class="btn btn-primary col-3 js-qty-up"]')
for a in productpage:
items = ScrapyloginItem()
items['Title'] = response.xpath('//h1[@class="text-center text-md-left mt-0"]/text()').get()
yield items
在这里,您可以看到loginproccess成功并且调用了,登录后我引用的页面也没有产品链接。那正是我想要的,我只是缺少了一些东西,它可以进行实际的抓取过程。
解决方法
根据您的描述,您的蜘蛛登录称为after_loging
方法,
var accview
具有一定的价值,因此它会输出'success'并在此结束,因为这就是缩进代码的方式。
请注意,只有在您的accview
变量为空时,才会产生新请求。
def after_loging(self,response):
open_in_browser(response)
accview = response.xpath('//div[@class="myaccounticons row text-center"]')
if accview:
print('success')
else:
print(':(')
for url in self.start_urls:
yield Request(url=url,callback=self.parse_page)
您可能想要这样的东西:
def after_loging(self,response):
open_in_browser(response)
accview = response.xpath('//div[@class="myaccounticons row text-center"]')
if accview:
print('success')
else:
print(':(')
for url in self.start_urls: # Notice the indentation here
yield Request(url=url,callback=self.parse_page)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。