scrapy解析基本操作

本文介绍了使用Scrapy进行Web爬虫的基本操作,包括创建项目、设置参数和在spider.py文件中解析HTML。通过一个海贼王漫画在线阅读的例子,详细解释了如何利用Scrapy的xpath进行内容提取,如获取a标签及其span选择器的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrapy一般的解析操作都存储在spider源文件当中,以海賊王漫畫_1036已更新_海賊王漫畫在線閱讀解析为例

第一步:创建项目及文件

python的scrapy工程的创建步骤_ragerabbitr的博客-CSDN博客

第二步:初始的参数调整

scrapy的初始化的一些设定_ragerabbitr的博客-CSDN博客

第三步:进入spider.py爬虫文件中

解释:所有的start_urls中的地址scrapy都会发送请求,然后返回的每个response用parse函数用来解析。scrapy可以直接用xpath解析,不用导入各种包了,方便很多。也可以用bs4和re但是要自己导入包,不过用xpath之后,bs4基本没怎么用过,re正则还是会用的,有时候匹配字符串用。

整体代码如下,解析的是漫画每个章节的标签:

import scrapy

class MangabzSpider(scrapy.Spider):
    name = 'mangabz'
    # allowed_domains = ['http://www.mangabz.com/139bz/']
    start_urls = ['http://www.mangabz.com/139bz/']
    #请求该列表中的每一页,返回一个response对象给parse函数,parse函数负责解析

    def parse(self, response):
        # 用xpath解析页面,可以直接用

        # 标签对象,可以继续进行xpath解析
        a_list = response.xpath('//div[@id="chapterlistload"]/a')
        # 返回a标签对象的列表
        for a in a_list:
            print(a)
            span = a.xpath('./span/text()')[0]
            # 返回a标签中span标签的第一个
            print(span)

        # 标签整个内容
        a_contents = response.xpath('//*[@id="chapterlistload"]/a').extract()
        # 返回a标签列表
        for a in a_contents:
            print(a)

        # 找文本
        a_texts = response.xpath('//*[@id="chapterlistload"]/a/text()').extract()
        # 返回a标签文本内容列表
        for a in a_texts:
            print(a)

        # 找属性
        a_hrefs = response.xpath('//*[@id="chapterlistload"]/a/@href').extract()
        # 返回a标签的href属性值列表
        for href in a_hrefs:
            print(href)

        a_href = response.xpath('//*[@id="chapterlistload"]/a/@href').extract_first()
        # 返回查找到的a标签中的第一个href值
        print(a_href)

分段解释及输出:

代码第一段:

# 标签对象,可以继续进行xpath解析
a_list = response.xpath('//div[@id="chapterlistload"]/a')
# 返回a标签对象的列表
    for a in a_list:
        print(a)
        span = a.xpath('./span/text()')[0]
        # 返回a标签中span标签的第一个
        print(span)

输出内容:每一个for循环输出一个a标签选择器和span选择器

<Selector xpath='//div[@id="chapterlistload"]/a' data='<a href="/m29581/" class="detail-list...'>
<Selector xpath='./span/text()' data='(19P)'>
<Selector xpath='//div[@id="chapterlistload"]/a' data='<a href="/m29580/" class="detail-list...'>
<Selector xpath='./span/text()' data='(17P)'>
<Selector xpath='//div[@id="chapterlistload"]/a' data='<a href="/m29579/" class="detail-list...'>
<Selector xpath='./span/text()' data='(17P)'>

代码第二段:

# 标签整个内容
a_contents = response.xpath('//*[@id="chapterlistload"]/a').extract()
# 返回a标签列表
    for a in a_contents:
        print(a)

输出内容: a标签整个文本

<a href="/m209490/" class="detail-list-form-item  " title="索隆VS燼" target="_blank">第1035話 索隆VS燼                    <span>(16P)</span>
                   </a>
<a href="/m207755/" class="detail-list-form-item  " title="山治VS奎因" target="_blank">第1034話 山治VS奎因                    <span>(14P)</span>
                       </a>
<a href="/m206879/" class="detail-list-form-item  " title="霜月耕三郎" target="_blank">第1033話 霜月耕三郎                    <span>(23P)</span>
                       </a>
<a href="/m206099/" class="detail-list-form-item  " title="御田的愛刀" target="_blank">第1032話 御田的愛刀                    <span>(21P)</span>
                       </a>

代码第三段:

# 找文本
a_texts = response.xpath('//*[@id="chapterlistload"]/a/text()').extract()
# 返回a标签文本内容列表
    for a in a_texts:
        print(a)

输出内容:a标签中文本的内容,不包含a标签下其他标签的内容

第1019話 直升角龍
第1018話 甚平VS福斯福
第1017話 號令
第1016話 在下小玉是也

代码第四段:

# 找属性
a_hrefs = response.xpath('//*[@id="chapterlistload"]/a/@href').extract()
# 返回a标签的href属性值列表
    for href in a_hrefs:
        print(href)

输出内容:

/m29734/
/m29733/
/m29732/
/m29731/
/m29730/
/m29729/

代码第五段:

a_href = response.xpath('//*[@id="chapterlistload"]/a/@href').extract_first()
# 返回查找到的a标签中的第一个href值
print(a_href)

输出内容:

/m210786/

通过以上实例,可以解析到源码中的任何标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值