scrapy个人循序渐进

urlyy

学习动机

我想写一个爬热点新闻的爬虫项目,最好能满足

  1. 规则化爬虫爬多个网站
  2. 结合docker和docker-copmpose和k8s进行分布式部署
  3. 具有代理池
  4. 充分使用Scrapy框架
  5. 可以结合一些NoSQL进行存储
  6. 作为一个服务方便调用(Flask)

创建项目

我是用conda创建的虚拟环境,这个自己去配去
创建环境conda create -n envName python=3.10
进入环境conda activate envName
安装scrapypip install scrapy
创建项目scrapy startproject newsCrawlernewsCrawler是我的项目名
跟着他的提示
cd newsCrawler
scrapy genspider example example.com这个example是一个你的Spider类,他会作为example.py在spiders文件夹里,这个类设置的爬取的网站是example.com,这个可以自己再改的,所以无脑用就行

第一个小demo

爬取的是百度热搜

  1. 定义新闻数据实体,在items.py中
    1
    2
    3
    4
    5
    6
    import scrapy

    class NewsItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()
    time = scrapy.Field()
  2. 修改spiders文件夹内的exampleSpider.pybaiduSpider.py,修改允许爬取的域名和起始URL
    1
    2
    3
    4
    5
    # 部分代码
    class BaiduSpider(scrapy.Spider):
    name = 'baidu'
    allowed_domains = ['top.baidu.com']
    start_urls = ['https://top.baidu.com/board?tab=realtime']
  3. 分析网站结构,编写解析网站元素得到目标数据的爬虫代码
    1
    2
    3
    4
    5
    6
    7
    8
    # 这个代码和上面的是一块的,这个parse就是BaiduSpider的类方法
    def parse(self, response):
    news_list = response.xpath('//*[@id="sanRoot"]/main/div[2]/div/div[2]/div[position()>=1]')
    for news in news_list:
    item = NewsItem()
    item['url'] = news.xpath('./div[2]/a/@href').get()
    item['title'] = news.xpath('./div[2]/a/div[1]/text()').get()
    yield item
  4. settings.py中配置以UTF-8导出,不然中文会以unicode字符显示。(似乎也可以在Spider中写编码或者用Pipeline中编码并导出,但我就是用的命令导出的,所以没考虑那两个)
    这个配置随便找一行放上去即可,居左
    1
    2
    # 导出数据时以UTF-8编码导出
    FEED_EXPORT_ENCODING='UTF-8'
  5. 编写启动类
    其实我们这里是用python执行命令行代码,这样会方便很多
    创建一个main.py
    1
    2
    3
    4
    5
    6
    7
    from scrapy.cmdline import execute

    if __name__ == '__main__':
    # 同在cmd中输入 scrapy crawl baidu -o baidu_news.json
    # 注意第一个baidu是被执行的spider的name
    # 如果不想打印日志,可以再加个'--nolog'
    execute(['scrapy', 'crawl', 'baidu','-o','baidu_news.json'])

在Linux环境(虚拟机)下使用Docker配置NoSQL和MQ

Linux下Docker安装几种NoSQL和MQ

获取请求中的数据

https://news.qq.com/
在这里插入图片描述
在控制台中发现数据是从接口中获得的
请求网址:`https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list?sub_srv_id=24hours&srv_id=pc&offset=0&limit=20&strategy=1&ext=

  • 标题: scrapy个人循序渐进
  • 作者: urlyy
  • 创建于 : 2022-08-14 12:55:02
  • 更新于 : 2023-06-19 13:31:45
  • 链接: https://urlyy.github.io/2022/08/14/scrapy个人循序渐进/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。