【scrapy爬取搞笑网站的段子案例】

创建scrapy工程

 scrapy startproject duanzi

进入项目

 cd .\duanzi\

创建爬虫文件

scrapy genspider duanzitext www.example.com

查看爬虫文件

在这里插入图片描述

配置信息调整

setting.py
一下信息都可找到

//添加
LOG_LEVEL = "ERROR"
//True 改为false  这是robot协议
ROBOTSTXT_OBEY = False
//设置 user agent
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"

编写爬虫文件

确认爬取页面url
https://www.6jianshi.com/txt/page-1

在爬虫文件
确认请求url

start_urls = ["https://www.6jianshi.com/txt/page-1"]

获取数据

 def parse(self, response):
      print(response)
      pass

执行程序

scrapy crawl duanzitext

打印数据
<200 https://www.6jianshi.com/txt/page-1>

进一步解析数据

进入页面
在这里插入图片描述

xpath 获取

xpath 可以百度 了解语法

  div_list = response.xpath('/html/body//div[@class="posts"]//div[@class="art-list"]')

在这里插入图片描述
分别 解析节点的信息

for div in div_list:
	#获取名字
	user = div.xpath("./div[1]/div[2]//text()").extract()
    user = "".join(user)
    #获取内容
    content = div.xpath("./div[2]//text()").extract()
    content = "".join(content)

结果展示打印

  print(user,content,"\n")

在这里插入图片描述

本地存储

正常可以如下存储

  with open('file.txt', 'w', encoding='utf-8')  as fs:
       fs.write(user)
       fs.write(content)
       print(user+"ok")

常常有人遇到这样的报错 编码问题
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position 29: illegal multibyte sequence

解决就是使用
encoding=‘utf-8’

但是scrapy的存储不同

方式一: 基于终端指令的存储

在这里插入图片描述
数据整合输出

list = []
for div in div_list:
    user = div.xpath("./div[1]/div[2]//text()").extract()
    user = "".join(user)
    content = div.xpath("./div[2]//text()").extract()
    content = "".join(content)
    # print(user,content,"\n")
    
    #创建对象
    data = {
        "user": user,
        "content": content
    }
    #综合数据
    list.append(data)
#返回要存储的数据
return list

指令输出

 scrapy crawl duanzitext -o file.csv

最终结果

在这里插入图片描述

另一种基于pip管道的存储 可能需要单独写一篇 后续更新

最后源码

import scrapy


class DuanzitextSpider(scrapy.Spider):
    name = "duanzitext"
    # allowed_domains = ["www.example.com"]
    start_urls = ["https://www.6jianshi.com/txt/page-1"]

    # 获取数据
    def parse(self, response):
        # print(response)
        div_list = response.xpath('/html/body//div[@class="posts"]/div[@class="art-list"]')
        # print(div_list)
        list1 = []
        for div in div_list:
            user = div.xpath("./div[1]/div[2]//text()").extract()
            user = "".join(user)
            content = div.xpath("./div[2]//text()").extract()
            content = "".join(content)
            #创建对象
            data = {
                "user": user,
                "content": content
            }
            #综合数据
            list1.append(data)
        #返回要存储的数据
        print(list1)
        return list1
        pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值