Rangka kerja Scrapy ialah rangka kerja perangkak web berasaskan Python yang digunakan khusus untuk mendapatkan maklumat daripada Internet. Ia cekap, fleksibel dan berskala serta boleh digunakan untuk merangkak pelbagai jenis data, seperti halaman web, imej, audio, dsb. Artikel ini akan memperkenalkan ciri utama dan sorotan teknikal rangka kerja Scrapy dan memberikan contoh kod yang sepadan.
1. Ciri
- Pemprosesan tak segerak
Rangka kerja Scrapy menggunakan pemprosesan tak segerak dan dilaksanakan melalui rangka kerja Twisted. Kaedah ini boleh meningkatkan kecekapan perangkak dan menjimatkan sumber sistem. Dalam Scrapy, setiap komponen mengendalikan permintaan secara tidak segerak Permintaan ini ditambahkan pada baris gilir dan dilaksanakan hanya pada masa yang sesuai.
- Pemprosesan berbilang benang
Komponen dalam rangka kerja Scrapy menggunakan model berbilang benang berdasarkan Twisted, yang boleh mengendalikan berbilang permintaan pada masa yang sama dan meningkatkan kecekapan.
- Pengurusan permintaan dan respons yang sangat baik
Pengurusan permintaan dan respons dalam rangka kerja Scrapy adalah sangat fleksibel Permintaan dan respons boleh ditambah, diubah suai atau dipadamkan pada bila-bila masa mengikut keperluan, dan kedalaman, keluasan, kelajuan dan aspek lain. laman web boleh diselaraskan.
- Data Persistence
Rangka kerja Scrapy menyediakan set lengkap penyelesaian kegigihan data, yang boleh menyimpan data yang dirangkak dalam pangkalan data, fail setempat atau kaedah lain, seperti FTP.
- Pemalam yang mudah ditulis
Rangka kerja Scrapy menyediakan mekanisme pemalam yang boleh melanjutkan fungsi rangka kerja dengan mudah, seperti menambah perisian tengah muat turun tersuai, perisian tengah perangkak, dsb.
2. Sorotan teknikal
- Gunakan pemilih untuk memproses HTML
Rangka kerja Scrapy mempunyai modul terbina dalam berdasarkan pemilih XPath dan CSS, yang boleh memproses dan menghuraikan dokumen HTML dengan mudah.
Contoh kod:
from scrapy.selector import Selector
# 获取HTML文本
html = '<div class="class1"><a href="http://www.baidu.com">baidu</a></div>'
sel = Selector(text=html)
# 使用CSS选择器提取数据
links = sel.css('div.class1 a::attr(href)').extract()
# 使用XPath选择器提取数据
links = sel.xpath('//div[@class="class1"]/a/@href').extract()
Salin selepas log masuk
- Gunakan Item Pipeline untuk memproses data
Rangka kerja Scrapy menyediakan mekanisme Item Pipeline, yang boleh memproses dan menyimpan data yang dirangkak dengan mudah. Talian Paip Item terdiri daripada berbilang komponen Setiap komponen boleh mengubah suai Item atau menghantar Item kepada komponen seterusnya.
Contoh kod:
import pymongo
class MongoPipeline(object):
def __init__(self):
# 连接MongoDB数据库
self.client = pymongo.MongoClient(host='localhost', port=27017)
self.db = self.client['mydatabase']
self.collection = self.db['mycollection']
def process_item(self, item, spider):
# 处理Item数据
data = dict(item)
self.collection.insert_one(data)
return item
Salin selepas log masuk
- Gunakan Perisian Tengah Muat Turun untuk mengendalikan permintaan dan respons
Rangka kerja Scrapy menyediakan mekanisme Perisian Tengah Muat Turun yang boleh mengendalikan permintaan dan respons dengan menambahkan perisian tengah. Middleware boleh mengubah suai pengepala permintaan dan respons, kandungan permintaan dan tindak balas, menetapkan proksi, dsb.
Contoh kod:
from scrapy import signals
class MyDownloaderMiddleware(object):
def process_request(self, request, spider):
# 修改请求头部信息
request.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
def process_response(self, request, response, spider):
# 处理响应内容
return response
def process_exception(self, request, exception, spider):
# 处理异常
pass
Salin selepas log masuk
- Menggunakan Spider Middleware untuk mengendalikan Spiders
Rangka kerja Scrapy menyediakan mekanisme Spider Middleware yang boleh mengendalikan Spider dengan menambahkan middleware. Middleware boleh mengubah suai permintaan dan respons Spider, menambah atau memadam fungsi pemprosesan Spider, dsb.
Contoh kod:
from scrapy import signals
class MySpiderMiddleware(object):
def process_spider_input(self, response, spider):
# 处理Spider的输入
return response
def process_spider_output(self, response, result, spider):
# 处理Spider的输出
return result
def process_spider_exception(self, response, exception, spider):
# 处理Spider的异常
pass
Salin selepas log masuk
Secara umum, rangka kerja Scrapy adalah cekap, fleksibel dan berskala, mampu memproses pelbagai jenis data, dan mempunyai keupayaan pemprosesan yang berkuasa. Dengan mempelajari ciri dan sorotan teknikal rangka kerja Scrapy, anda boleh menggunakan dan menggunakan rangka kerja Scrapy dengan lebih baik untuk merangkak dan memproses maklumat.
Atas ialah kandungan terperinci Susun secara sistematik ciri-ciri dan sorotan teknikal rangka kerja buruk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!