爬虫-Scrapy(二) 爬取糗百笑话-单页

1. Scrapy 设置文件修改

配置文件就是项目根路径下的 settings,py ,改下面的配置信息

a.遵循人机协议设置成false,否则基本啥也爬不到

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

b. 设置ua,不然大部分网址是爬不到的

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'

c. 开下request-headers,这样看起来更像浏览器,这个可以按自己的浏览器改下。

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
   'Accept': 'application/json, text/javascript, */*; q=0.01',
   'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
}

d. 设置访问延迟,这个很重要,过于频繁的请求不但容易被封,还可能把一些小站搞崩溃,因为Scrapy本身是异步并发的,不设置害人害己

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 3

e. 日志等级,参照个人习惯设置吧,我设置成了WARNING,这样程序运行后输出就清净了,适合我们学习阶段频繁运行程序

LOG_LEVEL= 'WARNING'

2. 爬取和解析笑话

先用浏览器打开糗百,选择导航栏里的段子,因为这些是纯文本的,先不弄图片和视频。

把url贴过来,先测试下,是成功的。

再回到浏览器中,查看一个笑话的页面源码,然后折叠下,观察下html的结构,很容易就能看到笑话列表路径是这里
在这里插入图片描述
OK,写xpath 获取下笑话列表,同样的方法,找下作者 和内容的位置,用xpath定位。

import scrapy


class Qiubai1Spider(scrapy.Spider):
    name = 'qiubai1'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        #获取笑话列表
        joke_list = response.xpath("//div[contains(@class, 'article block')]")
        for joke in joke_list:
            author = joke.xpath("./div/a[2]/h2/text()").extract_first()
            print(author)
            content = joke.xpath(".//div[@class='content']/span/text()").extract()
            print(content)

运行看下效果
在这里插入图片描述

已经可以看到作者和笑话的列表了。

3. item 接收

将爬取结果放到item中,item作为scrapy 框架中的数据通用容器,既能便于管理和结构化数据,有能方便和pipeline交互进行数据存储处理。

我们直接修改创建项目后自动生成items.py

import scrapy


class Scpy1Item(scrapy.Item):

    author = scrapy.Field()
    content = scrapy.Field()

然后修改spdier中的代码,将数据传递个item

import scrapy
import re
from scpy1.items import Scpy1Item

class Qiubai1Spider(scrapy.Spider):
    name = 'qiubai1'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        #获取笑话列表
        joke_list = response.xpath("//div[contains(@class, 'article block')]")

        for joke in joke_list:
            # 解析作者、内容
            author = joke.xpath("./div/a[2]/h2/text()").extract_first()
            content = joke.xpath(".//div[@class='content']/span/text()").extract()
            # 封装数据至item
            item = Scpy1Item()
            item['author'] =  re.sub("[\n]", "", author)
            item['content'] = re.sub("[\n]", "", ','.join(content))
            yield item
            # 打印item,测试结果
            print(item)

运行看下效果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值