python - Scrapy编辑从Rule中提取的编辑链接
问题描述
我正在亚马逊上测试以解析产品,我想抓取产品,我得到了正确的产品 xpath,但我想编辑它以匹配,"https://www.amazon.com/dp/{}".format("ASIN")
即从链接中删除一些额外的东西,我也得到了它的正则表达式,但 scrapy 是当我process_value
从Link Extractors使用时显示错误。我怎样才能解决这个问题?
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.loader import ItemLoader
from myamazon.items import MyamazonItem
from scrapy.loader import ItemLoader
import re
class AmazonSpider(CrawlSpider):
name = 'amazon'
allowed_domains = ['amazon.com']
start_urls = ['http://amazon.com/']
rules = (Rule(LinkExtractor(restrict_xpaths='//li[@class="a-last"]/a/@href')),
Rule(LinkExtractor(restrict_xpaths='//a[@class="a-link-normal a-text-normal"]'),callback="parse",
process_value= lambda i:f"https://www.amazon.com/dp/{re.search('dp/(.*)/',i).groups()[0]}")
)
错误:
process_value= lambda i:re.serach('dp/(.*)/',i).groups()[0])
TypeError: __init__() got an unexpected keyword argument 'process_value'
解决方案
看起来您正在尝试使用参数process_value
inRule()
而不是LinkExtractor()
.
让我们格式化您的代码:
rules = (
Rule(
LinkExtractor(
restrict_xpaths='//li[@class="a-last"]/a/@href'
)
),
Rule(
LinkExtractor(
restrict_xpaths='//a[@class="a-link-normal a-text-normal"]'
),
callback="parse",
process_value= lambda if: "https://www.amazon.com/dp/{re.search('dp/(.*)/',i).groups()[0]}"
)
)
这里更明显的process_value
是用于Rule()
. scrapy.spiders.Rule不期望process_value
,但LinkExtractor不期望。
推荐阅读
- reactjs - 致命:未找到存储库
- templates - Opencart 树枝在模板中显示搜索标签
- flutter - 如何根据经过的时间实现有限数量的方法执行?
- vue.js - 如何在 Vuejs3 的设置函数中查看计算值
- python - Pandas change row to column and extract. Tried pivot but see Index contains duplicate entries, cannot reshape
- python - python中的matplotlib子图
- java - 找不到类 java.io.File 的主要或单个公共构造函数
- python - 使用 python face_recognition 库时 Heroku 服务器上的内存过载
- iframe - 嵌入特定 Vimeo 网址时遇到问题
- javascript - Javascript 正则表达式:第二次出现块:ABC.js 音乐符号