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/
通过以上实例,可以解析到源码中的任何标签