一、命令列直接敲一行**,優點:該方法很簡單,懶人專用2.該方法不穩定,有時候沒效果,具體原因暫時不清楚,具體介紹如下:
1.執行命令scrapy crawl bdbk -s jobdir=job_info/001
2.重新爬取時,一定要注意檔案裡是否有資料,如果有的話,千萬不要以w或wb形式寫入,否則原先內容會被覆蓋。要以a或ab形式寫入。
二、將已經爬取的url整理出來,每個url經過md5加密壓縮,後置於集合中,每次爬取時,判斷該集合中是否有該元素,有的話,pass掉,沒的話繼續爬。爬取大量資料時,經過md5加密壓縮成較小的儲存空間的檔案,方便大規模抓取。優點:方法很穩定,效果很好,缺點:抓取數量過多時,可能會影響抓取效率,每乙個待抓的url都要和集合中的元素對比,空間時間複雜度高。
from scrapy import request,spider
from crawler.items import bdbkitem
import logging
import hashlib
# 將已經抓取的url置於集合中
def creat_set():
with open('/home/tml-1/pycharmprojects/untitled/stored') as f:
data=f.read().lstrip('').split(', ')
url_st=set()
for i in data:
url_st.add(i.rstrip('\'').lstrip('\'').rstrip('\\n'))
return url_st
# 給每個已經抓取的url加密成16位的md5值
base_url = '' # 百科中每個條目都具有的url
shared_str = '/item/' # 屬於百科的鏈結中都具有的str
set_stored=creat_set()
def start_requests(self):
yield request(url=self.start_urls, callback=self.parse)
def parse(self, response):
item = bdbkitem() # 例項化bdbkitem類
if response.status == 200: # 請求成功,執行以下**
url_list = response.xpath("//a/@href") # 獲取頁面中所有鏈結
item['url'] = response.url # 獲取當前百科條目的url,置於item中
item['title'] = response.xpath("//h1/text()").extract_first() # 獲取當前百科條目的名稱,置於item中
#item['time'] = time.ctime()
#self.count+=1
#logging.debug("這是debug日誌,item數量{}".format(str(self.count)))
contents = response.xpath("//div[@class='para']") # 獲取具有所有文字的所有div元素
text1 = # 新建乙個空列表,用於儲存文字
for content in contents:
text0 = content.xpath(".//text()").extract() # 獲取乙個div裡面的內容,為列表形式
text0 = str(''.join(text0).strip()) # 合併列表為字串,此為乙個div裡的文字內容
url_set = set() # 建立乙個空集合
for url_single in url_list: # 遍歷當前頁面(百科條目)中所有的鏈結
url_set.add(url_single.extract()) # 將所有鏈結置於該集合中
valide_url =
for url in url_set:
if self.shared_str in url: # 判斷該鏈結是否有「/item/」字串
for url in valide_url:
if creat_md5(url) not in self.set_stored:
self.set_stored.add(creat_md5(url))
yield request(url=url, callback=self.parse, dont_filter=false)
else:
logging.info('已經爬取過了')
else: # 如果請求失敗,輸出warning日誌
logging.warning("this url is not functional {}".format(response.url))
yield item
使用scrapy框架進行爬蟲需要注意的
1.start urls 內的 要補充完整 2.在獲取資料時,如果我們想要先獲取先獲取某一整塊內容,然後再從此內容中獲取單個零碎資訊 比如def parse self,response ul list response.xpath ul class post small post 一小整塊 prin...
Scrapy入門 爬取需要登入後才能訪問的資料
前面幾篇文章抓取的均是公開的資料,即沒有控制訪問許可權即可瀏覽的資料。但還是存在一些 比如教學管理系統 內部論壇等 它會首先要求你登入,然後才能訪問到後續的內容。這種情況下,就要首先解決登入授信的問題。在開始編碼實現前,我們先了解下登入授信的原理。cookie 那客戶端是如何拿到cookie的呢,下...
提公升scrapy的爬取效率
增加併發 預設scrapy開啟的併發執行緒為32個,可以適當進行增加。在settings配置檔案中修改concurrent requests 100值為100,併發設定成了為100。降低日誌級別 在執行scrapy時,會有大量日誌資訊的輸出,為了減少cpu的使用率。可以設定log輸出資訊為info或...