scrapy框架学习


scrapy框架学习

整体框架

scrapy-framework

下载

1
2
pip install scrapy
scrapy version

创建scrapy项目

1
scrapy startproject test

文件目录:

scrapy-tree

  • spiders中存放爬虫
  • middelwares.py为中间件文件,很重要
  • pipelines.py为管道文件,用于文件的传输和存储方法
  • settings.py为配置文件

运行项目

运行单个爬虫

1
2
# scrapy crawl 爬虫名
scrapy crawl bilibili

创建爬虫

1
2
# scrapy genspider "爬虫名字" "限制域名"
scrapy genspider bilibili bilibili.com

此操作将在spiders文件夹中创建bilibili.py文件

需要重写里面的parse函数

爬取文章名称和url

1
2
3
4
5
6
7
8
with open("shaun.txt", "w", encoding="utf-8") as f:
article = response.xpath("//article")
card_list = article.xpath("./div/div/div[@class = 'card']")
for card in card_list:
title = card.xpath("./a/div/span/text()").extract_first()
href = card.xpath("./a/@href").extract_first()
url = response.urljoin(href)
f.write(f"{title}, {url}\n")

爬虫

重写新建爬虫中的parse函数

该函数是用于处理返回的数据

可以使用yield 'data' 进行向管道传递数据,’data’需要替换为具体的数据。

也可以在该方法中直接调用一些接口进行储存

1
2
3
4
5
6
7
class BilibiliSpider(scrapy.Spider):
name = "bilibili"
allowed_domains = ["bilibili.com"]
start_urls = ["https://bilibili.com"]

def parse(self, response):
print(response.text())

对于爬取到的url继续进行爬取

使用yield scrapy.Request进行实现

1

管道

在pipeline中完成数据传输

1
2
3
4
5
class 类名:
def process_item(self, item, spider):
# item: 数据
# spider: 爬取这个数据的爬虫
returnitem

将数据存入文件

关于将数据存到文件里的情况,若每次存一条数据都打开文件再关闭,效率过低

因此,需要在开始存数据之前打开文件,在所有数据存好了之后再关闭

scrapy框架中给了两个方法可以进行重载,以完成上述功能

1
2
3
4
5
6
7
8
9
10
11
12
13
class CaipiaoPipeline:
def open_spider(self, spider):
self.f = open("./data.csv", "a", encoding = "utf-8")

def close_spider(self, spider):
if self.f:
self.f.close()

def process_item(self, item, spider):
# item: 数据
# spider: 爬取这个数据的爬虫
self.f.write(f"{item['qihao']}, {'_'.join(item['red_ball'])}, {item['blue_ball']}\n)
return item

将数据存入数据库

思路和上面一样,只是把那两个函数的实现改成连接数据库和关闭数据库即可。


文章作者: Shaun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Shaun !
评论
  目录