spider编写规则 - ShichaoMa/structure_spider GitHub Wiki
1 spider必须继承自StructureSpider
2 若执行分类抓取则需要配置item_pattern = (), page_pattern = ()
,其中:
3 提供get_base_loader
静态方法,传入response
,返回CustomLoader对应一个Item,即CustomLoader(item=YourItem())
4 提供enrich_data
方法,必须被enrich_wrapper
装饰,其中:
- 传入
item_loader, response
,使用item_loader的方法(add_value
, add_xpath
, add_re
)添加要抓取的属性名(必须在item中有定义)及其对应表达式或值。
- 如此次渲染需要产生子请求,比如抓取豆瓣作者详细信息,则通过
response.meta["item_collector"]
提供的(add
, extend
)方法,
将(prop, item_loader, request_meta)
添加到item_collector中。其中:
- prop: 下次请求获取的全部字段如果是做为一个子item返回,子item在其父item中对应的字段名称。如
"author": {子item数据结构}
,此时prop="author"
- item_loader: 用来抽取下次请求中字段的item_loader,如果下次请求返回子item,则此item_loader必须是子item构造的item_loader,如
CustomLoader(item=AuthorItem())
- request_meta: 组建
Scrapy.Request
所需要的kwargs
。type: dict
5 下次请求所回调的enrich函数名称为 enrich_'prop'
。比如:enrich_author
。
6 可以为spider类提供一个need_duplicate
方法用来去重,传入详情页链接url,返回用来判定重复的部分。比如两件链接很像https://jd.item/12345
和http://jd.item/12345
,但链接是不同的,直接返回链接不可能判定重复,可用返回链接的共同部分12345,则去重成功。
7 可以重写基类的方法来实现个性化抓取