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 可以重写基类的方法来实现个性化抓取