国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

爬蟲爬 JSON HTML 數(shù)據(jù)

cocopeak / 3300人閱讀

摘要:最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。一個(gè)爬蟲的框架?;镜葍r(jià)于選擇其中的文字提取屬性文檔,這個(gè)我不會,我也沒看使用這個(gè)類庫解析如請求方式可以用來給中文字符數(shù)據(jù)放入傳遞即可。

最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。

其實(shí)之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來那人離職了,有可能就沒有爬蟲這方面的需求了。突然又有了一些,前端這邊出人做一下。老大說用 py 做,前期先調(diào)研一下。

原理

爬蟲其實(shí)原理上很簡單,我們==客戶端,他們==服務(wù)端。
客戶端發(fā)送請求 req,服務(wù)端返回響應(yīng) rsp。拿到響應(yīng)之后解析數(shù)據(jù),入庫,就完事了。

請求數(shù)據(jù) req

一般來說請求分為兩種,拉數(shù)據(jù) get 比較多。
偶爾部分接口需要登錄,那就是多帶 cookie 或者 headers。
其實(shí)還有一部分工作就是分析入?yún)?/strong>。

get
參數(shù)拼接在 url

post
參數(shù)放在 body

響應(yīng)數(shù)據(jù) rsp

返回?cái)?shù)據(jù)大體上是兩種

JSON
一般來說,通過 抓包 或者說 network 工具。我們找到了服務(wù)端的接口,那么我直接訪問這個(gè)接口即可。
本文第一個(gè)重點(diǎn)來了:切換到移動端再查一遍,往往有不一樣的收獲,一般來說 PCM 端的進(jìn)度不了,有可能都不是一個(gè)項(xiàng)目組,所以實(shí)現(xiàn)方式就會有差別。

html
比較坑的一種方式,因?yàn)闆]有找到 JSON 接口。無奈只能走解析 HTML 的路子。

調(diào)研

Node
之前給后臺搭架子的時(shí)候使用過,主要功能點(diǎn)如下:

自動登錄,(拿headers、cookie

存儲本地,每次請求帶上 token

啟動代理服務(wù)

py 老大說要用這個(gè)東西。咨詢了一下其他朋友,說可以使用下面的工具。

requests + beautifulSoup
使用起來其實(shí)就是 requests 發(fā)請求, beautifulSoup 解析 HTML。比較原始。

scrapy
一個(gè)爬蟲的框架。我在這里學(xué)的 www.scrapyd.cn。實(shí)現(xiàn)上比較完整,可以設(shè)置請求間隔,隨機(jī) ua 等功能。

前端實(shí)現(xiàn)
我一個(gè)鐵頭娃,怎么能輕言放棄?身為一個(gè)前端er,還是這些 api 讓我更加親切

XHR
發(fā)請求利器,打開對方頁面,cookie 啥的都自帶。無敵就是這么寂寞。
其實(shí)還可以找到對方請求發(fā)起的位置,打個(gè)斷點(diǎn),把對方內(nèi)部的代碼綁定到全局,這樣一些內(nèi)部邏輯什么的也都沒問題。
而且還 JSON HTML 通吃。

iframe
針對 HTML 類型的處理。同域的情況下,也無敵好嗎?

HTML 獲取 DOM 節(jié)點(diǎn)?

甚至可以取 window 上的對象。vue SSR 你感覺到了威脅嗎?

網(wǎng)上其他服務(wù)商提供的接口(真香啊)。有免費(fèi)的有收費(fèi)的,一般免費(fèi)的限量。

比如抖音熱度?

比如各類音樂的歌單和作品?

IP 查詢

天氣查詢

好了上面說了那么多,建議老大限制,我選擇了 scrapy。

scrapy
scrapy 是一個(gè)網(wǎng)頁爬蟲框架,神馬叫做爬蟲,如果沒聽說過,那就:內(nèi)事不知問度娘,外事不決問谷歌,百度或谷歌一下吧!……(這里的省略號代表 scrapy 很牛逼,基本神馬都能爬,包括你喜歡的蒼老師……這里就不翻譯了)

看到這個(gè)騷的飛起的介紹了嗎?沒錯(cuò),我就是在上面學(xué)的。scrapy 中文站。接下來我就介紹一下我認(rèn)為對于新手比較關(guān)注的東西

scrapy HTML

scrapy 處理器中的 response 標(biāo)識你拿到的 rsp 上面自帶了一些方法,一般來說需要關(guān)注的只有兩個(gè)

css 選擇器

quote.css("span.text::text").extract_first() 中的 "span.text::text"眼熟嗎?
沒錯(cuò),就是我們常用的選擇器。通過這個(gè) api,我們可以把我們想要的數(shù)據(jù),限時(shí)在一個(gè)很小的范圍,然后拿字符串即可。
啥?你說你不會 css 選擇器?前端培訓(xùn)-初級階段(5 - 8)-CSS選擇器(基本、層級、屬性、偽類、偽狀態(tài))

extract() 函數(shù)提取列表

extract_first() 代表提取第一個(gè)元素?;镜葍r(jià)于 extract()[0]

::text 選擇其中的文字

::attr(href) 提取屬性

xpath

quote.xpath("span/small/text()").extract_first()
文檔,這個(gè)我不會,我也沒看

scrapy JSON

import json 使用這個(gè)類庫解析如:json.loads(response.body.decode("utf-8"))

scrapy 請求方式 get

import urllib 可以用來給中文字符 encode

yield scrapy.FormRequest(
    url, 
    method = "GET", 
    headers = self.headers, 
    formdata={}, 
    callback = self.parse_list, 
    dont_filter = True, 
    meta = {
        "offset": 0,
    })
post

數(shù)據(jù)放入 formdata 傳遞即可。

yield scrapy.FormRequest(
    url, 
    method = "POST", 
    headers = self.headers, 
    formdata={}, 
    callback = self.parse_list, 
    dont_filter = True, 
    meta = {
        "offset": 0,
    })
給回調(diào)模塊帶參數(shù)
meta = {
        "offset": 0,
    }

如下方式接收

disstid = response.meta["offset"]
外部傳參方式

scrapy crawl argsSpider -a tag=愛情
內(nèi)部是使用如下命令可以接收到。

    def start_requests(self):
        url = "http://lab.scrapyd.cn/"
        tag = getattr(self, "tag", None)  # 獲取tag值,也就是爬取時(shí)傳過來的參數(shù)
scrapy mysql

大數(shù)據(jù)那邊說爬回來的數(shù)據(jù)要入庫。

scrapyMysql/scrapyMysql/items.py 編寫對應(yīng)入庫字段。

import scrapy

class ScrapymysqlItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    tag = scrapy.Field()  # 標(biāo)簽字段
    cont = scrapy.Field()  # 名言內(nèi)容
    pass

scrapyMysql/scrapyMysql/spiders/inputMysql.py 寫爬蟲處理操作時(shí),入庫

item = ScrapymysqlItem()  # 實(shí)例化item類
    for v in mingyan:  # 循環(huán)獲取每一條名言里面的:名言內(nèi)容、作者、標(biāo)簽
        item["cont"] = v.css(".text::text").extract_first()  # 提取名言
        tags = v.css(".tags .tag::text").extract()  # 提取標(biāo)簽
        item["tag"] = ",".join(tags)  # 數(shù)組轉(zhuǎn)換為字符串
        yield item  # 把取到的數(shù)據(jù)提交給pipline處理

編寫MySQL存儲插件:MySQLPipeline.py

import pymysql.cursors
class MySQLPipeline(object):
    def __init__(self):
        # 連接數(shù)據(jù)庫
        self.connect = pymysql.connect(
            host="127.0.0.1",  # 數(shù)據(jù)庫地址
            port=3306,  # 數(shù)據(jù)庫端口
            db="scrapyMysql",  # 數(shù)據(jù)庫名
            user="root",  # 數(shù)據(jù)庫用戶名
            passwd="root",  # 數(shù)據(jù)庫密碼
            charset="utf8",  # 編碼方式
            use_unicode=True)
        # 通過cursor執(zhí)行增刪查改
        self.cursor = self.connect.cursor()

    def process_item(self, item, spider):
        self.cursor.execute(
            """insert into mingyan(tag, cont)
            value (%s, %s)""",  # 純屬python操作mysql知識,不熟悉請惡補(bǔ)
            (item["tag"],  # item里面定義的字段和表字段對應(yīng)
             item["cont"],))
        # 提交sql語句
        self.connect.commit()
        return item  # 必須實(shí)現(xiàn)返回

settings啟動MySQLPipline組件

ITEM_PIPELINES = {
   "scrapyMysql.MySQLPipline.MySQLPipeline": 300,
}

總結(jié)一下

到現(xiàn)在,我們已經(jīng)完成了所有基礎(chǔ)知識的積累。遇到不會我們?nèi)ダ锟???br>總結(jié)一下需要注意點(diǎn)的

切換 PC 和 M 端,尋找可行的方案

注意節(jié)制(部分容易限量)

python 編碼問題(真的好煩)

網(wǎng)上提供的那個(gè) mysql 庫和我的不合,我換了一個(gè)MySQLdb

第三方的接口是真香

微信公眾號

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44084.html

相關(guān)文章

  • JSON HTML 數(shù)據(jù)

    摘要:最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。一個(gè)爬蟲的框架。基本等價(jià)于選擇其中的文字提取屬性文檔,這個(gè)我不會,我也沒看使用這個(gè)類庫解析如請求方式可以用來給中文字符數(shù)據(jù)放入傳遞即可。 最近這兩周在忙著給公司爬一點(diǎn)數(shù)據(jù),更文的速度有一點(diǎn)下降,預(yù)計(jì)今天就爬完了,總結(jié)總結(jié)經(jīng)驗(yàn)。 其實(shí)之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來那人離職了,有可...

    Hegel_Gu 評論0 收藏0
  • node.js 取招聘信息分析各職業(yè)錢途(+動態(tài)IP代理+數(shù)據(jù)可視化分析)

    摘要:成功爬取了拉鉤網(wǎng)上多個(gè)招聘崗位的具體信息后,數(shù)據(jù)可視化并得出分析結(jié)果如下從整體看,北上廣深杭這五個(gè)城市前端工程師招聘崗位,北京是遙遙領(lǐng)先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發(fā)于 github blog 不想看爬蟲過程只想看職位錢途數(shù)據(jù)分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...

    546669204 評論0 收藏0
  • bilibili壁紙站-node

    摘要:前言之前初學(xué)的時(shí)候,有用爬蟲爬過一些磁力鏈接詳情見羞羞的爬蟲但是沒有并發(fā),沒有代理,那時(shí)也對異步不是很了解所以這次又寫了個(gè)爬蟲,爬取壁紙站的所有壁紙并且爬取開心代理的條,并將有用的存進(jìn)文件中用到的模塊控制并發(fā)解析庫使用代理讀寫文件其中的具 前言 之前初學(xué)node的時(shí)候,有用爬蟲爬過一些磁力鏈接詳情見羞羞的node爬蟲但是沒有并發(fā),沒有代理,那時(shí)也對異步不是很了解所以這次又寫了個(gè)爬蟲,爬...

    sf_wangchong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<