电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python Scrapy爬蟲框架的使用

瀏覽:2日期:2022-06-29 14:28:59

導(dǎo)讀:如何使用scrapy框架實現(xiàn)爬蟲的4步曲?什么是CrawSpider模板?如何設(shè)置下載中間件?如何實現(xiàn)Scrapyd遠(yuǎn)程部署和監(jiān)控?想要了解更多,下面讓我們來看一下如何具體實現(xiàn)吧!

Scrapy安裝(mac)

pip install scrapy

注意:不要使用commandlinetools自帶的python進(jìn)行安裝,不然可能報架構(gòu)錯誤;用brew下載的python進(jìn)行安裝。

Scrapy實現(xiàn)爬蟲新建爬蟲

scrapy startproject demoSpider,demoSpider為項目名。

確定目標(biāo)

編寫items.py,如添加目標(biāo)字段:person = scrapy.Field()

制作爬蟲

scrapy genspider demo 'baidu.com',創(chuàng)建demo爬蟲文件,指定爬取域。

修改demo.py里的start_urls的地址為自己想爬取的地址如:https://www.cnblogs.com/teark/

隨意修改parse()方法,如保存所爬取的頁面,可以這樣:

def parse(self, response): with open('teark.html', 'w') as f: f.write(response.text)

運(yùn)行爬蟲,看看效果:scrapy crawl demo

有了保存的頁面后(可注釋掉或刪掉保存頁面的代碼),根據(jù)頁面結(jié)構(gòu)提取所需數(shù)據(jù),一般用xpath表達(dá)式,如:

def parse(self, response): for _ in response.xpath('//div[@class=’teark_article’]'): item = ItcastItem() title = each.xpath('h3/text()').extract() content = each.xpath('p/text()').extract() item[’title’] = title[0] item[’content’] = content[0] yield item

保存數(shù)據(jù):scrapy crawl demo -o demo.json(以下格式都行:jsonl,jsonl,csv,xml)

注:該過程在取值中經(jīng)常需要頁面調(diào)試,使用scrapy shell(最好先安裝ipython,有語法提示),調(diào)試好了再放到代碼里,如:

scrapy shell 'https://www.cnblogs.com/teark/'response.xpath(’//*[@class='even']’)print site[0].xpath(’./td[2]/text()’).extract()[0]處理內(nèi)容

pipline常用來存儲內(nèi)容,pipline.py中必須實現(xiàn)process_item()方法,該方法必須返回Item對象,如:

import jsonclass ItcastJsonPipeline(object): def __init__(self): self.file = open(’demo.json’, ’wb’) def process_item(self, item, spider): content = json.dumps(dict(item), ensure_ascii=False) + 'n' self.file.write(content) return item def close_spider(self, spider): self.file.close()

在settings.py中添加ITEM_PIPELINES配置,如:

ITEM_PIPELINES = { 'demoSpider.pipelines.DemoJsonPipeline':300}

重新啟動爬蟲:scrapy crawl demo,看看當(dāng)前目錄是否生成demo.json

CrawlSpiders

CrawlSpider是spider的派生類,為了從爬取的網(wǎng)頁中獲取link并繼續(xù)爬取。

快速創(chuàng)建 CrawlSpider模板:scrapy genspider -t crawl baidu baidu.com

Rule類制定了爬取規(guī)則;LinkExtractors類為了提取鏈接,如:

scrapy shell 'http://teark.com/article.php?&start=0#a'from scrapy.linkextractors import LinkExtractor# 注意轉(zhuǎn)義字符&page_lx = LinkExtractor(allow=(’comment.php?&start=d+’))page_lx.extract_links(response)

測試完后就知道了allow和rules了,修改spider代碼:

#提取匹配 ’http://teark.com/article.php?&start=d+’的鏈接page_lx = LinkExtractor(allow = (’start=d+’))rules = [ #提取匹配,并使用spider的parse方法進(jìn)行分析;并跟進(jìn)鏈接(沒有callback意味著follow默認(rèn)為True) Rule(page_lx, callback = ’parseContent’, follow = True)]

注:callback 千萬不能寫 ’parse’

Logging

添加日志功能:settings.py中添加如下:

LOG_FILE = 'DemoSpider.log'# 還有CRITICAL, ERROR, WARNING DEBUG等級別LOG_LEVEL = 'INFO'FormRequest

該方法用來發(fā)送POST請求,在spider.py中如下:

def start_requests(self): url = ’http://www.renren.com/PLogin.do’ yield scrapy.FormRequest( url = url, formdata = {'email' : 'teark@9133***34.com', 'password' : '**teark**'}, callback = self.parse_page )

模擬登陸:

import scrapyclass LoginSpider(scrapy.Spider): name = ’demo.com’ start_urls = [’http://www.demo.com/users/login.php’] def parse(self, response): return scrapy.FormRequest.from_response( response, formdata={’username’: ’teark’, ’password’: ’***’}, callback=self.after_login ) def after_login(self, response): # 檢查登陸成功還是失敗 if 'authentication failed' in response.body: self.log('Login failed', level=log.ERROR) returnDownloader Middlewares防止爬蟲被反策略

設(shè)置隨機(jī)User-Agent

禁用Cookies,可以通過COOKIES_ENABLED 控制 CookiesMiddleware 開啟或關(guān)閉

設(shè)置延遲下載降低頻率

使用谷歌/百度等搜索引擎服務(wù)器頁面緩存獲取頁面數(shù)據(jù)

使用IP地址池——VPN和代理IP

使用cralera(專用于爬蟲的代理組件),配置中間件后請求都是通過crawlera發(fā)出的

設(shè)置下載中間件——Downloader Middlewares

鍵為中間件類的路徑,值為其中間件的順序(order)

DOWNLOADER_MIDDLEWARES = { ’mySpider.middlewares.MyDownloaderMiddleware’: 543,}

當(dāng)請求通過下載中間件時,process_request方法被調(diào)用;當(dāng)下載中間件完成請求后傳遞響應(yīng)給引擎時process_response方法被調(diào)用。

在settings.py同級目錄下創(chuàng)建middlewares.py文件,如:

import randomimport base64from settings import USER_AGENTSfrom settings import PROXIESclass RandomUserAgent(object): def process_request(self, request, spider): useragent = random.choice(USER_AGENTS) request.headers.setdefault('User-Agent', useragent)class RandomProxy(object): def process_request(self, request, spider): proxy = random.choice(PROXIES) if proxy[’user_passwd’] is None: request.meta[’proxy’] = 'http://' + proxy[’ip_port’] else: base64_userpasswd = base64.b64encode(proxy[’user_passwd’]) request.headers[’Proxy-Authorization’] = ’Basic ’ + base64_userpasswd request.meta[’proxy’] = 'http://' + proxy[’ip_port’]

與代理服務(wù)器連接需要使用base64編碼,如果有需要身份驗證的話還需要加上授權(quán)信息,

修改settings.py配置USER_AGENTS和PROXIES

免費(fèi)代理IP上網(wǎng)搜,或購買可用的私密代理IP

USER_AGENTS = ['Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0', 'Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5' ]PROXIES = [{’ip_port’: ’111.8.60.9:8123’, ’user_passwd’: ’user1:pass1’},{’ip_port’: ’101.71.27.120:80’, ’user_passwd’: ’user2:pass2’},{’ip_port’: ’122.96.59.104:80’, ’user_passwd’: ’user3:pass3’},]# 禁用cookiesCOOKIES_ENABLED = False# 設(shè)置下載延遲DOWNLOAD_DELAY = 3# 添加自己編寫的下載中間件DOWNLOADER_MIDDLEWARES = { #’mySpider.middlewares.MyCustomDownloaderMiddleware’: 543, ’mySpider.middlewares.RandomUserAgent’: 1, ’mySpider.middlewares.ProxyMiddleware’: 100}Scrapyd - 爬蟲的遠(yuǎn)程部署和監(jiān)控安裝Scrapyd

sudo pip install scrapydsudo pip install scrapyd-client修改scrapyd的配置文件

啟用scrapyd配置,在deploy后面指定當(dāng)前項目的Scrapyd配置名,配置Scrapyd服務(wù)的ip和port,以及當(dāng)前項目的項目名,如:

sudo vi /usr/local/lib/python3.8.6/site-packages/scrapyd/default_scrapyd.conf

# scrapy項目的settings文件位置,不用改動[settings]default = Demo.settings# Scrapyd_Tencent是配置名[deploy:Scrapyd_Demo] # 若是本機(jī)Scrapyd服務(wù)部署,則使用localhost即可否則使用服務(wù)主機(jī)的ipurl = http://localhost:6800/ # 需要部署和監(jiān)控的Scrapy項目名project = Demo通過Scrapyd客戶端工具掛載項目

指令:scrapyd-deploy Scrapyd_Demo -p Demo

scrapyd-deploy 是客戶端命令,參數(shù)是 Scrapyd配置名,以及 -p 指定項目名

遠(yuǎn)程部署和停止爬蟲

部署:curl http://localhost:6800/schedule.json -d project=Demo -d spider=demo

停止:curl http://localhost:6800/cancel.json -d project=Demo -d job=iundsw....

注:爬蟲啟動成功后,會生成job值,停止爬蟲時需要通過job值停止。

以上就是python Scrapy爬蟲框架的使用的詳細(xì)內(nèi)容,更多關(guān)于python Scrapy爬蟲框架的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 斗式提升机_链式斗提机_带式斗提机厂家无锡市鸿诚输送机械有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 塑钢课桌椅、学生课桌椅、课桌椅厂家-学仕教育设备首页 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 安徽成考网-安徽成人高考网 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 事迹材料_个人事迹名人励志故事| 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | LOGO设计_品牌设计_VI设计 - 特创易| 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 |