scrapy通用爬虫CrawlSpider案例

  1. 新建爬虫方式:
    1.创建scrapy工程:scrapy startproject projectName
    2.cd projectName
    3.创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com
    如本例中:
    scrapy startproject scrapyuniversal
    cd scrapyuniversal
    scrapy genspider -t crawl universal tech.china.com
    本例中爬取的是链接是:http://tech.china.com/articles
    可以参考下面urls.py文件

  2. 新建通用配置文件:
    在项目scrapyuniversal目录下,新建一个configs目录,跟spiders目录同级.
    新建一个json文件,本例中命名为 china.json
    可以参考链接获取chian.json文件: https://blog.csdn.net/ding283595861/article/details/101343249

  3. 新建爬取规则rules, 放在scrapyuniversal目录下,文件命名为: rules.py
    具体实现如下:

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule
#爬取规则以及注册解析response callback函数
rules = {
 'china':(
  Rule(LinkExtractor(allow='article\/.*\.html',restrict_xpaths='//div[@id="left_side"]//div[@class="con_item"]'),callback='parse_item',follow = True),
  Rule(LinkExtractor(restrict_xpaths='//div[@id="pageStyle"]//a[contains(.,"下一页")]'),follow = True)
 )
}
  1. 新建提取url通用文件,放在scrapyuniversal目录下,命名为urls.py
    具体的实现如下:
#获取url链接
def china1(start,end):
 for page in range(start,end+1):
  yield 'http://tech.china.com/articles/index_'+str(page)+'.html'
  1. 新建获取通用配置json文件,放在scrapyuniversal目录下,命名为utils.py
    具体实现如下:
from os.path import realpath,dirname
import json
#获取通用配置json文件.
def get_config(name):
 path = dirname(realpath(__file__))+ '/configs/' +name + '.json'
 print("path:%s"%path)
 with open(path,'r',encoding='utf-8') as f:
  return json.loads(f.read())
  1. 具体爬虫文件: universal.py 可以参考https://blog.csdn.net/ding283595861/article/details/101343391
  2. 新建item字段:items.py
    具体实现如下:
import scrapy
class ScrapyuniversalItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass
class NewsItem(scrapy.Item):
 title = scrapy.Field()
 url = scrapy.Field()
 text = scrapy.Field()
 datetime = scrapy.Field()
 source = scrapy.Field()
 website = scrapy.Field()
  1. 在scrapyuniversal目录上一级目录下,新建一个执行的文件,run.py
    具体的实现如下:
import sys
from scrapy.utils.project import get_project_settings
from scrapyuniversal.spiders.universal  import UniversalSpider
from scrapyuniversal.utils import get_config
from scrapy.crawler import CrawlerProcess

def run():  
 #该参数指定为configs中china.json文件名字(china)
 name = sys.argv[1]
 custom_settings = get_config(name)
 spider = custom_settings.get('spider','universal')
 project_settings = get_project_settings()
 settings = dict(project_settings.copy())
 settings.update(custom_settings.get('settings'))
 process = CrawlerProcess(settings)
 process.crawl(spider,**{'name':name})
 process.start()
if __name__ == '__main__':
 run()

进入到scrapyuniversal目录下,执行

python run.py china  

china就是对应的configs配置下的china.json文件.

通用配置的好处就是爬虫文件是固定的,不用每次都改变,用户如果想爬取其他网站,可以 做以下几点修改:
A: 重新配置一个 ***.json文件
B:在rules.py中,新建一个提取规则
C:在urls.py中,新建一个获取链接的函数
D:在items.py 中新建一个类,定义想要爬取的各个字段信息
然后运行 :

  python  run.py  配置文件名字 

这样的好处,用户提取不同的网站信息,只需要关心爬取规则方法,不需要另处理爬虫文件了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值