日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

14-爬虫之scrapy框架的基本使用01

發布時間:2024/9/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 14-爬虫之scrapy框架的基本使用01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

scrapy框架

簡介:Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。對于框架的學習,重點是要學習其框架的特性、各個功能的用法即可。

  • 環境安裝:
    • mac、linux:
      • pip install scrapy
    • windows:
      • pip3 install wheel
      • 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      • 進入下載目錄,執行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl
        • Twisted:就是一個異步的架構,被作用在了scrapy中
        • 安裝報錯:需要更換另一個版本的twisted文件進行安裝即可
      • pip3 install pywin32
      • pip3 install scrapy
      • 安裝完成后在cmd中輸入scrapy回車,如果沒有報錯就說明安裝成功

scrapy的基本使用

創建一個爬蟲工程:scrapy startproject proName
進入工程目錄創建爬蟲源文件:scrapy genspider spiderName www.xxx.com
執行工程:scrapy crawl spiderName

創建一個工程

  • scrapy startproject proName

    - 目錄結構
    • scrapy.cfg 項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
    • items.py 設置數據存儲模板,用于結構化數據,如:Django的Model
    • pipelines 數據持久化處理
    • settings.py 配置文件,如:遞歸的層數、并發數,延遲下載等
    • spiders 爬蟲目錄,如:創建文件,編寫爬蟲解析規則

進入工程目錄創建爬蟲源文件

  • scrapy genspider spiderName www.xxx.com

對爬蟲源文件編寫相應的代碼

執行工程

  • scrapy crawl spiderName
  • 執行工程后,默認會輸出工程所有的日志信息

修改工程的配置文件settings.py

  • 我們可以指定類型日志的輸出
    • 在settings.py中加入 LOG_LEVEL = ‘ERROR’
    • 禁止robots
    • UA 偽裝

爬蟲文件spiderName內容闡述:

import scrapyclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://www.baidu.com/','https://www.sogou.com']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象def parse(self, response):pass

scrapy數據解析

  • 使用:response.xpath(“xpath表達式解析數據”)
  • scrapy封裝的xpath和etree中的區別
    • scrapy中的xpath直接將定位到的標簽中存儲的值或者屬性值取出,返回的是Selector對象,且相關的數據值是存儲在Selector對象的data中,需要調用extract(),extract_first()取出字符串數據

爬蟲源文件代碼如下

import scrapyclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象def parse(self, response):# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# scrapy的xpath和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中#extract()就是將data屬性值取出# 調用extract_first() 將列表中第一個列表元素表示的Selector對象中的data值取出#title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract_first()#content = article.xpath("//div[@class='post-content']/p/text()").extract_first()# 直接調用extract(),可以將列表中的每一個列表元素取出title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract()content = article.xpath("//div[@class='post-content']/p/text()").extract()# 將Selector對象data屬性值取出print(title,content)

持久化存儲

基于終端指令持久化存儲

  • 該種方式只可以將parse方法的返回值存儲到本地指定后綴的文本文件中

  • 執行指令:scrapy crawl spiderName -o filePath

    • 代碼如下:
import scrapyclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象# 基于終端指令的持久化存儲def parse(self, response):all_data = []# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# 我們可以看見解析出來的內容不是字符串數據,說明和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中#extract()就是將data屬性值取出# 調用extract_first() 將列表中第一個列表元素表示的Selector對象中的data值取出#title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract_first()#content = article.xpath("//div[@class='post-content']/p/text()").extract_first()# 直接調用extract(),可以將列表中的每一個列表元素取出title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract()content = article.xpath("//div[@class='post-content']/p/text()").extract()# 將Selector對象data屬性值取出print(title,content)dic = {"title":title,"content":content}all_data.append(dic)return all_data

基于管道的持久化存儲(重點)

1,在爬蟲文件中進行數據解析

2,在items.py中定義相關屬性

3,在爬蟲文件中將解析到的數據存儲封裝到 item類型的對象中

4,將item類型的對象提交給管道

5,在管道文件(pipelines.py)中,接受爬蟲文件提交過來的item類型對象,且對其進行任意形式的持久化存儲

6,在配置文件中開啟管道機制

7,展示一(extract_first())

import scrapy from gemoumou.items import GemoumouItemclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象# 基于管道的持久化存儲def parse(self, response):# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# 我們可以看見解析出來的內容不是字符串數據,說明和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中# extract()就是將data屬性值取出# 直接調用extract(),可以將列表中的每一個列表元素取出title = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text()").extract_first()content = article.xpath("//div[@class='post-content']/p/text()").extract_first()# 實例化一個item類型的對象,將解析到的數據存儲到該對象中item = GemoumouItem()# 不能使用item. 來調用數據item['title'] = titleitem['content'] = content# 將item對象提交給管道yield item

8,展示二(extract())


import scrapy from gemoumou.items import GemoumouItemclass GpcSpider(scrapy.Spider):# 爬蟲文件的名稱,當前源文件的唯一標識name = 'gpc'# allowed_domains表示允許的域名,用來限定start_urls那些url可以發請求那些不能 # allowed_domains = ['www.xxx.com'] #我們一般給注釋掉# start_urls起始url列表只可以存儲url#作用:列表中存儲的url都會被進行get請求的發送start_urls = ['https://duanziwang.com/category/經典段子/']# 數據解析#parse方法調用的次數取決于start_urls請求的次數#參數response:表示的就是服務器返回的響應對象# 基于管道的持久化存儲def parse(self, response):# 數據解析名稱和內容article_list = response.xpath('//*[@id="35087"]')for article in article_list:# 我們可以看見解析出來的內容不是字符串數據,說明和etree中xpath使用方式不同# xpath返回的列表中存儲是Selector對象,說明我們想要的字符串數據被存儲在了該對象的data屬性中# extract()就是將data屬性值取出# 直接調用extract(),可以將列表中的每一個列表元素取出title_content_list = article.xpath("//div[@class='post-head']/h1[@class='post-title']/a/text() | //div[@class='post-content']/p/text()").extract()# 實例化一個item類型的對象,將解析到的數據存儲到該對象中item = GemoumouItem()for title_content in title_content_list:# 不能使用item. 來調用數據item['title_content'] = title_content# 將item對象提交給管道yield item

總結

以上是生活随笔為你收集整理的14-爬虫之scrapy框架的基本使用01的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。