日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Python解決滑塊驗證,Scarpy框架采集數據到redis數據庫!

架構介紹

Scrapy一個開源和協作的框架,其最初是為了頁面抓取 (更確切來說, 網絡抓取 )所設計的,使用它可以以快速、簡單、可擴展的方式從網站中提取所需的數據。但目前Scrapy的用途十分廣泛,可用于如數據挖掘、監測和自動化測試等領域,也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。

? Scrapy 是基于twisted框架開發而來,twisted是一個流行的事件驅動的Python網絡框架。因此Scrapy使用了一種非阻塞(又名異步)的代碼來實現并發。整體架構大致如下

IO多路復用

Python解決滑塊驗證,Scarpy框架采集數據到redis數據庫!

 

# 引擎(EGINE)(大總管)
引擎負責控制系統所有組件之間的數據流,并在某些動作發生時觸發事件。有關詳細信息,請參見上面的數據流部分。
# 調度器(SCHEDULER)
用來接受引擎發過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL的優先級隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
# 下載器(DOWLOADER)
用于下載網頁內容, 并將網頁內容返回給EGINE,下載器是建立在twisted這個高效的異步模型上的
# 爬蟲(SPIDERS)
SPIDERS是開發人員自定義的類,用來解析responses,并且提取items,或者發送新的請求
# 項目管道(ITEM PIPLINES)
在items被提取后負責處理它們,主要包括清理、驗證、持久化(比如存到數據庫)等操作


# 兩個中間件
-爬蟲中間件
-下載中間件(用的最多,加頭,加代理,加cookie,集成selenium)


安裝創建和啟動

# 1 框架 不是 模塊
# 2 號稱爬蟲界的django(你會發現,跟django很多地方一樣)
# 3 安裝
	-mac,linux平臺:pip3 install scrapy
  -windows平臺:pip3 install scrapy(大部分人可以)
  	- 如果失?。?      1、pip3 install wheel #安裝后,便支持通過wheel文件安裝軟件,wheel文件官網:https://www.lfd.uci.edu/~gohlke/pythonlibs
      3、pip3 install lxml
      4、pip3 install pyopenssl
      5、下載并安裝pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
      6、下載twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      7、執行pip3 install 下載目錄Twisted-17.9.0-cp36-cp36m-win_amd64.whl
      8、pip3 install scrapy
 # 4 在script文件夾下會有scrapy.exe可執行文件
	-創建scrapy項目:scrapy startproject 項目名   (django創建項目)
  	-創建爬蟲:scrapy genspider 爬蟲名 要爬取的網站地址   # 可以創建多個爬蟲
    
 # 5 命令啟動爬蟲
		-scrapy crawl 爬蟲名字
  		-scrapy crawl 爬蟲名字 --nolog   # 沒有日志輸出啟動
 # 6 文件執行爬蟲(推薦使用)
	-在項目路徑下創建一個main.py,右鍵執行即可
  	from scrapy.cmdline import execute
    # execute(['scrapy','crawl','chouti','--nolog'])  # 沒有設置日志級別
    execute(['scrapy','crawl','chouti'])			  # 設置了日志級別

配置文件目錄介紹

-crawl_chouti   # 項目名
  -crawl_chouti # 跟項目一個名,文件夾
    -spiders    # spiders:放著爬蟲  genspider生成的爬蟲,都放在這下面
    	-__init__.py
      -chouti.py # 抽屜爬蟲
      -cnblogs.py # cnblogs 爬蟲
    -items.py     # 對比django中的models.py文件 ,寫一個個的模型類
    -middlewares.py  # 中間件(爬蟲中間件,下載中間件),中間件寫在這
    -pipelines.py   # 寫持久化的地方(持久化到文件,MySQL,redis,mongodb)
    -settings.py    # 配置文件
  -scrapy.cfg       # 不用關注,上線相關的
  
  
  
  
# 配置文件settings.py
ROBOTSTXT_OBEY = False   # 是否遵循爬蟲協議,強行運行
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/80.0.3987.149 Safari/537.36'    # 請求頭中的ua,去瀏覽器復制,或者用ua池拿
LOG_LEVEL='ERROR' # 這樣配置,程序錯誤信息才會打印,
	#啟動爬蟲直接 scrapy crawl 爬蟲名   就沒有日志輸出
  	# scrapy crawl 爬蟲名 --nolog  # 配置了就不需要這樣啟動了



# 爬蟲文件
class ChoutiSpider(scrapy.Spider):
    name = 'chouti'   # 爬蟲名字
    allowed_domains = ['https://dig.chouti.com/']  # 允許爬取的域,想要多爬就注釋掉
    start_urls = ['https://dig.chouti.com/']   # 起始爬取的位置,爬蟲一啟動,會先向它發請求

    def parse(self, response):  # 解析,請求回來,自動執行parser,在這個方法中做解析
        print('---------------------------',response)
Python解決滑塊驗證,Scarpy框架采集數據到redis數據庫!

 

爬取數據,并解析

# 1 解析,可以使用bs4解析
from bs4 import BeautifulSoup
soup=BeautifulSoup(response.text,'lxml')
soup.find_all()  # bs4解析
soup.select()  # css解析

# 2 內置的解析器
response.css  
response.xpath

# 內置解析 
  # 所有用css或者xpath選擇出來的都放在列表中
  # 取第一個:extract_first()
  # 取出所有extract()
# css選擇器取文本和屬性:
    # .link-title::text  # 取文本,數據都在data中
    # .link-title::attr(href)   # 取屬性,數據都在data中
# xpath選擇器取文本和屬性
    # .//a[contains(@class,"link-title")/text()]
    #.//a[contains(@class,"link-title")/@href]

# 內置css選擇期,取所有
div_list = response.css('.link-con .link-item')
for div in div_list:
    content = div.css('.link-title').extract()
    print(content)

數據持久化

# 方式一(不推薦)
  -1 parser解析函數,return 列表,列表套字典
    # 命令   (支持:('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle')
    # 數據到aa.json文件中
  -2 scrapy crawl chouti -o aa.json   
# 代碼:
lis = []
for div in div_list:
    content = div.select('.link-title')[0].text
    lis.append({'title':content})
    return lis


# 方式二 pipline的方式(管道)
   -1 在items.py中創建模型類
   -2 在爬蟲中chouti.py,引入,把解析的數據放到item對象中(要用中括號)
   -3 yield item對象
   -4 配置文件配置管道
       ITEM_PIPELINES = {
        # 數字表示優先級(數字越小,優先級越大)
       'crawl_chouti.pipelines.CrawlChoutiPipeline': 300,
       'crawl_chouti.pipelines.CrawlChoutiRedisPipeline': 301,
    	}
  -5 pipline.py中寫持久化的類
        spider_open  # 方法,一開始就打開文件
        process_item # 方法,寫入文件
        spider_close # 方法,關閉文件
        


保存到文件

# choutiaa.py 爬蟲文件
import scrapy
from chouti.items import ChoutiItem  # 導入模型類
class ChoutiaaSpider(scrapy.Spider):
    name = 'choutiaa'
    # allowed_domains = ['https://dig.chouti.com/']   # 允許爬取的域
    start_urls = ['https://dig.chouti.com//']   # 起始爬取位置
    # 解析,請求回來,自動執行parse,在這個方法中解析
    def parse(self, response):
        print('----------------',response)
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(response.text,'lxml')
        div_list = soup.select('.link-con .link-item')

        for div in div_list:
            content = div.select('.link-title')[0].text
            href = div.select('.link-title')[0].attrs['href']
            item = ChoutiItem()  # 生成模型對象
            item['content'] = content  # 添加值
            item['href'] = href
            yield item  # 必須用yield  	
            
# items.py 模型類文件
import scrapy
class ChoutiItem(scrapy.Item):
    content = scrapy.Field()
    href = scrapy.Field()
    
# pipelines.py 數據持久化文件
class ChoutiPipeline(object):
    def open_spider(self, spider):
        # 一開始就打開文件
        self.f = open('a.txt', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        # print(item)
        # 寫入文件的操作

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定