python爬虫scrapy框架初体验

目标网站:http://www.htqyy.com/top/hot

目标数据:爬取音乐网站中列表第前5页歌曲名称和音乐家的名字。

 

第一步:初始化项目

先在桌面创建一个文件夹,用于存放项目文件。

文件夹创建完成后,打开文件夹,在文件夹内打开控制台(快捷键Shift + 鼠标右键-->在此处打开命令窗口),在控制台输入下面命令:

scrapy startproject myspider

scrapy startproject 是固定的,后面的myspider是项目名称,可以自己命名。

命令执行完成后,在刚才新建的文件夹内会生成一个新的文件夹,文件夹的名字就是刚才输入的项目名称。

目录结构是这样的:

打开第一个文件夹,看到里面的目录结构是这样的:

 

第二步:创建模板文件

接下来创建爬虫的模板文件,用于爬取目标页面数据。创建方式还是在控制台执行命令行,这里需要在下面的文件夹内执行命令行:

scrapy genspider musicSpider htqyy.com

scrapy genspider 表示创建一个模板文件,musicSpider 是创建的模板的名称,不能和项目名称相同, htqyy.com是目标页面的地址。

关于这个命令的详细解读,可以参考 https://www.cnblogs.com/php-linux/p/11039743.html

命令执行完成,会在项目文件夹中生成文件名称为musicSpider.py的文件。

 

第三步:爬取网页内容并清洗。

到目前为止,都是在生成项目文件,接下来就要写相关代码,爬取网页内容。

编辑第二步生成的musicSpider.py文件,代码如下:

import scrapy
import re
from mySpider.items import MyspiderItem


class MusicspiderSpider(scrapy.Spider):
    name = 'musicSpider' #爬虫识别名称
    allowed_domains = ['htqyy.com'] #爬取网页范围
    start_urls = ['http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20'] #爬取页面地址

    headers = {
        'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding": "gzip, deflate",
        'Content-Length': '0',
        "Connection": "keep-alive",
        "Referer":"http://www.htqyy.com/top/hot"
    }

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, headers=self.headers ,callback=self.parse)

    def parse(self, response):
        data=response.body.decode() #获取相应内容

        titles=re.findall(r'title="(.*?)" sid',data)
        artists=re.findall(r'target="_blank">(.*?)</a>',data)

        for i in range(0,len(titles)):
        	item=MyspiderItem()
        	item["title"]=titles[i]
        	item["artist"]=artists[i]

        	yield item

        #1.获取当前请求的url,提取出页面信息
        beforeUrl=response.url
        pat1=r"pageIndex=(\d)"
        page=re.search(pat1,beforeUrl).group(1)

        page=int(page)+1 #得到下一次请求的pageIndex信息

        #2.构造下一页的url,发送下一次请求
        if page<5:
        	#构造下一页url
        	nextUrl="http://www.htqyy.com/top/musicList/hot?pageIndex="+str(page)+"&pageSize=20"
        	#发送下一次请求
        	yield scrapy.Request(nextUrl,callback=self.parse)

 

还需要编辑items.py文件:

代码如下: 

import scrapy

class MyspiderItem(scrapy.Item):
    title = scrapy.Field()
    artist = scrapy.Field()

这里定义的两个字段,分别表示歌曲的名称和艺术家的名字。 

 

编辑管道文件pipelines.py,管道文件负责将爬取到的数据保存到本地。

代码如下:

from itemadapter import ItemAdapter

#管道,负责item后期的处理或保存
class MyspiderPipeline:

    #定义初始化参数(可以省略)
    def __init__(self):
        self.file=open("music.txt","a")

    #管道每次接受到的item后执行的方法(必须实现)
    def process_item(self, item, spider):
        content=str(item)+"\n"
        self.file.write(content) #写入数据到本地
        return item

    #当爬虫结束时执行的方法(可以省略)
    def close_spider(self,spider):
        self.spider.close()

 

最后设置一下管道的优先级别:

在settings.py文件中,将这三行代码释放开

 

编辑完成,保存文件,然后运行项目。运行的方式是在控制台窗口输入命令行,这里和第二步一样,在文件夹中执行命令行:

scrapy crawl musicSpider

scrapy crawl 是固定的写法,表示运行项目,musicSpider是第二步中创建的模板的名字。

命令执行完,如下所示,会新增一个txt文件。

 

文件内容就是目标数据,打开后如下:

 

到此为止,已经成功获取到了目标数据。

 

最后总结一下整个步骤:

1.初始化项目文件

2.生成模板文件

3.编写爬虫代码 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值