当前位置:   article > 正文

七、CrawlSpider实现微信小程序社区爬虫--scrapy爬虫初学者学习过程-----精通Python爬虫框架scrapy_scrapy框架爬取微信小程序

scrapy框架爬取微信小程序

七、CrawlSpider实现微信小程序社区爬虫

作者:Irain
QQ:2573396010
微信:18802080892
视频资源链接:https://www.bilibili.com/video/BV1P4411f7rP?p=83.

1 创建项目和CrawlSpider爬虫
1.1 在DOC窗口创建项目和CrawlSpider爬虫
scrapy startproject wxapp  # 创建项目
cd wxapp  #  进入项目文件夹
scrapy genspider -t crawl wxapp_spider "wxapp-union.com"  # 创建爬虫
# CrawlSpider爬虫 与 普通爬虫 创建方式不一样
  • 1
  • 2
  • 3
  • 4
1.2 创建项目和CrawlSpider爬虫示例

在这里插入图片描述
在这里插入图片描述

1.3 pycharm打开项目和CrawlSpider爬虫

在这里插入图片描述

2 LinkExtractor
2.1LinkExtractor参数

allow : 设置规则,获取目标url,排除其他url。
follow : 在当前url下,是否继续获取满足allow规则的url。
callback : 对当前的url进行操作(提取url或元素)。

在这里插入图片描述

2.2 示例(所有代码在后面)

在这里插入图片描述

3 爬取结果展示

在这里插入图片描述

4 代码附录
4.1 wxapp.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from wxapp.items import WxappItem
class WxappSpiderSpider(CrawlSpider):
    name = 'wxapp_spider'  #  爬虫名字
    allowed_domains = ['wxapp-union.com']   #  网站域名
    start_urls = ['http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1']  # 起始网页
    rules = (
        #  allow:需要爬取的网页; follow:是否继续爬取下一页
        Rule(LinkExtractor(allow=r'.+mod=list&catid=2&page=\d'), follow=True),
        #  callback:提取详情网页内容
        #   follow=False: 防止重复爬取。因为:在详情网页中出现其他符合爬取规格的网页。
        Rule(LinkExtractor(allow=r'.+article-.+\.html'), callback="parse_detail", follow=False),
    )
    def parse_detail(self, response):   #  爬取详情网页
        title = response.xpath("//*[@id='ct']/div[1]/div/div[1]/div/div[2]/div[1]/h1/text()").get()  #  提起文章标题
        author = response.xpath("//p[@class='authors']//a/text()").get()  #  提起作者
        time = response.xpath("//*[@id='ct']/div[1]/div/div[1]/div/div[2]/div[3]/div[1]/p/span/text()").get()  #  提起发表时间
        content = response.xpath("//td//text()").getall()  #  提起文章内容
        content = "".join(content).strip()  #  list类型转换为字符型
        item = WxappItem(title=title, author=author, time=time, content=content)  #  传参
        yield item  #  item传给管道pipelines
        print("=" * 40)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
4.2 pipelines.py
from scrapy.exporters import JsonLinesItemExporter #  一条一条数据存入磁盘,占用内存小
class WxappPipeline(object):
    def __init__(self):
        self.fp = open("wxjc.json","wb") #  二进制方式写入,不需要编码格式
        # ensure_ascii:中文字符
        self.exporters = JsonLinesItemExporter(self.fp,ensure_ascii=False, encoding="utf-8")
    def process_item(self, item, spider):
        self.exporters.export_item(item)  # 输出数据
        return item
    def close_spider(self,spider):
        self.fp.close()  #  爬虫结束后,关闭文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
4.3 items.py
import scrapy
class WxappItem(scrapy.Item):     # 定义容器类
    title = scrapy.Field()
    author = scrapy.Field()
    time = scrapy.Field()
    content = scrapy.Field()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4.4 settings.py 中的参数设置:

参考链接:https://blog.csdn.net/weixin_42122125/article/details/105556273.

发布日期:2020年4月17日

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/599601
推荐阅读
相关标签
  

闽ICP备14008679号