scrapy模块

目录

  • scrapy模块
        • 安装scrapy
        • 创建一个项目

安装scrapy

# 如果安装了conda 直接使用
conda install scrapy
# 使用pip 安装
pip install scrapy
# 安装出错
# 如果是Twisted安装出错,进入官网
https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
# 找到Twisted安装包,下载下来之后使用 pip 安装

创建一个项目

  • 打开一个cmd,进入安装scrapy的环境
  • 创建一个项目,例如爬取 https://www.bqkan.com/3_3012/ 笔趣看的小说 【武动乾坤】
  • 创建一个爬虫
  • 使用代码编辑器打开项目(例如pycharm) 目录结构如下
  • 新创建启动文件
from scrapy import cmdline
cmdline.execute("scrapy crawl wu".split())
  • 修改wu.py文件
import scrapy
from wudong.items import WudongItem

class WuSpider(scrapy.Spider):
    name = 'wu'
    allowed_domains = ['www.bqkan.com']
    start_urls = ['https://www.bqkan.com/3_3012/1331001.html']

    def parse(self, response):
        contents = response.css('div#content::text').getall()
        contents = [x.strip() for x in contents if x.strip() != '']
        contents.pop()
        contents.pop()  # 去除结尾多余的字符
        contents = "\n\t".join(contents).replace('[笔趣看\xa0\xa0www.biqukan.com]百度搜索“笔趣看小说网”手机阅读:m.biqukan.com', '')

        title = response.css('h1::text').get()  # 章节名

        yield WudongItem(title=title, contents=contents)

        next_url = response.xpath('//a[contains(text(), "下一章")]/@href').get()

        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(url=next_url, callback=self.parse)

  • 修改items.py文件
import scrapy
class WudongItem(scrapy.Item):
    title = scrapy.Field()
    contents = scrapy.Field()
  • 修改pipelines.py文件
class WudongPipeline:
    def __init__(self):
        # 保存为txt文件
        self.f = open('武动乾坤.txt', 'w', encoding='utf-8')
    def process_item(self, item, spider):
        title = item['title']
        contents = item['contents']
        content = f'{title}\n\t{contents}'
        print(content, file=self.f, flush=True)  # 即使写入
        # self.f.write(content)
        return item
    def close_spider(self, spider):
        self.f.close()
  • 运行 startwudong.py 文件

正常会输出如下结果

同时创建一个文本文件

一个简单的scrapy爬虫结束

本文地址:https://blog.csdn.net/weixin_45906794/article/details/110930276