新手向爬蟲(三)別人的爬蟲在干啥


古人云博采眾長(zhǎng),我們來看看其他人的爬蟲是怎么學(xué)和用的:


爬蟲文章 in 簡(jiǎn)書程序員專題:

  1. like:128 - Python 爬取落網(wǎng)音樂

使用Scrapy爬取上述列表

安裝Scrapy

  • 下載文件:lxmltwisted;并在該頁(yè)面上搜索scrapy并下載whl文件,最后使用pip install x.whl,x為 whl文件名,依次安裝三個(gè)文件。
  • 我下載的都是cp35-cp35m-win_amd64.whl,win7安裝成功。

簡(jiǎn)單快速的Scrapy

  • 編輯名為num1.py的文件添加以下內(nèi)容,使用命令行scrapy runspider num1.py -o 1.json在文件當(dāng)前所在目錄下運(yùn)行文件,表示使用Scrapy執(zhí)行該爬蟲并將輸出數(shù)據(jù)保存為json文件。
  • 整個(gè)爬取過程花費(fèi)了212.98秒,平均每個(gè)頁(yè)面花費(fèi)0.053秒。
# -*- coding: utf-8 -*-
# 文本編輯器編碼要設(shè)置對(duì),最好為UTF-8無BOM編碼
import scrapy

class Num1Spider(scrapy.Spider):
    name = "num1" # 爬蟲命名,在項(xiàng)目中有用
    allowed_domains = ["jianshu.com"] # 允許爬取的域名
    domain = 'http://jianshu.com' # 自己設(shè)置的基礎(chǔ)域名變量

    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    } # 請(qǐng)求頭
    base_url = 'http://m.itdecent.cn/collections/16/notes?order_by=added_at&page=%d'
    # 關(guān)于此處url,參看新手向爬蟲(一)
    num = 0 # 頁(yè)數(shù)
    
    def start_requests(self): # 默認(rèn)的開始函數(shù),用于提供要爬取的鏈接
        # url = self.base_url % self.num
        while self.num < 4000: # 程序員專題總頁(yè)數(shù)小于4000,共花費(fèi)212.975027秒
            self.num += 1
            yield scrapy.Request(self.base_url % self.num,
                             headers = self.headers,
                             callback = self.parse)
                             
    def parse(self, response):  # 默認(rèn)的回調(diào)函數(shù),用于鏈接下載完畢后調(diào)用來處理數(shù)據(jù)
    
        for index,i in enumerate(response.css(".title a::text").extract()):
            if "爬蟲" in i or "爬取" in i:
                like = response.css("a + span::text").extract()[index].replace(' · 喜歡 ', '')
                url = self.domain + response.css('.title a::attr(href)').extract()[index]
                yield {"title" : i, "like": like, "url": url}
                                

######################## Debug ###############################        
#        from scrapy.shell import inspect_response
#        inspect_response(response, self)
# 將以上兩句插入回調(diào)函數(shù)中任意位置,即可在運(yùn)行過程中中斷打開交互命令行,用于調(diào)試查看響應(yīng)內(nèi)容
######################## Run   ###############################       
# scrapy runspider num1.py -o 1.json

文本后處理

  • 用于從上一步生成的json文件中提取數(shù)據(jù)并排序生成簡(jiǎn)單的markdown。
# -*- coding: utf-8 -*-
import json

with open('1.json','r') as f:
    data = json.load(f)
    data = sorted(data, key =lambda x: int(x['like']), reverse=True)
    # 以喜歡數(shù)對(duì)文章進(jìn)行排序
    with open('1.md', 'w') as m:
        m.write('### 爬蟲文章 in 簡(jiǎn)書程序員專題:\n')
        for i in data:
            m.write('- *like*:**{like}** - [{title}]({url})\n'.format(**i))
            # **i 表示解包字典

Scrapy官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 爬蟲文章 in 簡(jiǎn)書程序員專題: like:128-Python 爬取落網(wǎng)音樂 like:127-【圖文詳解】py...
    喜歡吃栗子閱讀 22,749評(píng)論 4 411
  • 這四天到芳村去聽了幸福種子課程,周雯老師講的好棒,幽默風(fēng)趣,深入淺出。學(xué)到了一些心理學(xué)的理論,雖然知道這些不究竟,...
    超級(jí)傻妞閱讀 678評(píng)論 0 0
  • 1、FMDB FMDatabase:是一個(gè)提供 SQLite 數(shù)據(jù)庫(kù)的類,用于執(zhí)行 SQL 語(yǔ)句。FMResult...
    oncezou閱讀 317評(píng)論 0 0
  • 除夕,本應(yīng)是萬家團(tuán)圓的日子,正在值班的護(hù)士卻收到了丈夫因出警而受重傷正在搶救的消息,這突如其來的噩耗,讓她難以置信...
    那時(shí)那刻閱讀 436評(píng)論 3 1
  • 周國(guó)平先生說,日記是寫作的開始。如若一個(gè)人每天都堅(jiān)持寫日記,便不怕在日后寫不出好的作品來。以此強(qiáng)調(diào)并且肯...
    Echo95閱讀 200評(píng)論 0 0

友情鏈接更多精彩內(nèi)容