gpt4 book ai didi

python - Scrapy 链接提取器

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:24 25 4
gpt4 key购买 nike

我正在尝试使用 scrapy 编写一些代码,这些代码将遵循特定链接来备份 adobe Breeze Web 服务器上的数据。然而,我对 scrapy 及其用法相当陌生。该代码仍处于早期阶段,到目前为止我所掌握的大部分内容都是从 scrapy 教程中拼凑出来的

到目前为止,我最大的问题是在初次登录后抓取页面中的链接。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class LoginSpider(CrawlSpider):
name = 'example.com'
start_urls = [
'https://conted.breeze.und.nodak.edu/admin/meeting/folder/list?filter-rows=100&filter-start=0&sco-id=10003&tab-id=10003'
]

def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata={'login' : 'jake', 'password' : 'password'},
callback=self.after_login
)

def after_login(self, response):
# check login succeed before going on
if "Invalid user or password. Please try again." in response.body:
self.logger.error("Login failed")
return

rules = (
# Rule(LinkExtractor(deny_domains=['/admin/meeting?sco-id=10003&tab-id=10003',
# '/admin/meeting?sco-id=10004&tab-id=10004'])),
#Rule(LinkExtractor(allow=['/admin/meeting?sco-id=\w+']), callback='parse_item'),
Rule(LinkExtractor(allow=[r'\w+']), callback='parse_item'),
)

def parse_item(self, response):
self.logger.info('response.url=%s' % response.url)

起始 URL 是我想要从中抓取链接的实际页面,但服务器会提示用户使用其凭据登录,然后才能访问该特定页面。因此理论上,对此页面的响应将包含我正在寻找的链接。尽管我没有收到我的广泛正则表达式的任何结果。

<小时/>

注释掉代码

注释掉的规则用于我需要在下一页中找到的链接的说明符。正如您所看到的,我添加了一个完全开放的正则表达式来测试页面上的任何链接。这返回了以下 result

页面来源

虽然实际页面位于登录后面,但我尝试从中接收链接的主目录的源 HTML 可以找到 here

最佳答案

我建议跳过规则并从 after_login() 显式创建请求

即:

def after_login(self, response):
# check login succeed before going on
if "Invalid user or password. Please try again." in response.body:
self.logger.error("Login failed")
for href in response.selector.xpath('//a/@href').extract():
url = response.urljoin(href)
yield request(url, callback=self.parse_item)

关于python - Scrapy 链接提取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com