基于scrapy的微信小程序社区教程文章爬取

  1. 首先在cmd终端创建scrapy项目 ,项目名称为wxapp
scrapy startproject wxapp
  1. 接着在cmd终端创建爬虫py文件,py文件名为wxapp_spider.py,请求域名为"wxapp-union.com"
scrapy genspider -t crawl wxapp_spider "wxapp-union.com"
  1. 在pycharm下打开创建好的项目
  2. 在setting.py文件内设置LOG_LEVEL = “ERROR” 将日志信息级别设置为只显示一般错误信息,防止在控制台输出太多日志信息干扰调试代码
    设置ROBOTSTXT_OBEY = False 将服从机器人协议取消
    设置DOWNLOAD_DELAY = 2将下载延迟设置为2,免得被封掉IP
    设置请求头信息如下:
    DEFAULT_REQUEST_HEADERS = {
    ‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
    ‘Accept-Language’: ‘en’,
    “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
    }
    启动下载设置如下:
    ITEM_PIPELINES = {
    ‘wxapp.pipelines.WxappPipeline’: 300,
    }
  3. 把start_urls设置为"http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1",这是教程文章的第一个列表页如下图
    在这里插入图片描述
  4. spider.py代码块如下:
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 = (
        #链接提取器,从起始请求的url地址页面中提取符合规则的链接。follow=true表示跟进,即请求到符合规则的url地址时又发现符合规则的地址也要跟进请求
        #提取列表页的url请求并跟进,但无需回调,因为我们无需对列表页内容进行解析,全部真实爬取的数据都在详情页
        Rule(LinkExtractor(allow=r'.+mod=list&catid=2&page=\d'), follow=True),
        #从起始页提取符合规则的详情页url,并使用parse_detail函数回调解析,不跟进
        Rule(LinkExtractor(allow=r".+article-.+\.html"), callback="parse_detail", follow=False)
    )

    #解析方法
    def parse_detail(self, response):
        item = {}
        #利用xpath语法解析出文章的标题,作者,发布时间和内容
        title = response.xpath("//h1[@class='ph']/text()").get()
        author_p = response.xpath("//p[@class='authors']")
        author = author_p.xpath(".//a/text()").get()
        pub_time = author_p.xpath(".//span/text()").get()
        content = response.xpath("//td[@id='article_content']//text()").getall()
        content = "".join(content).strip()
        #利用WxappItem类构造json数据
        item = WxappItem(title=title, author=author, pub_time=pub_time, content=content)
        #以生成器的方式返回当前的一条json数据
        yield item
  1. items.py文件代码块如下:
import scrapy

class WxappItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    author = scrapy.Field()
    pub_time = scrapy.Field()
    content = scrapy.Field()
  1. pipelines.py文件代码块如下:
from scrapy.exporters import JsonLinesItemExporter

class WxappPipeline(object):

    def __init__(self):
        self.fp = open("./data/wxjs.json", "wb")
        self.expoter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding="utf-8")

    def process_item(self, item, spider):
        self.expoter.export_item(item)
        return item

    def close_spider(self):
        self.fp.close()
  1. 在项目根目录下新建start.py文件用于在pycharm中实现命令行启动项目,代码块如下:
from scrapy import cmdline

cmdline.execute("scrapy crawl wxapp_spider".split())
  1. 最终保存的json文件如下图:
    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值