精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
極簡單之爬蟲入門
1. 爬蟲是什么

爬蟲(Spider),這里當(dāng)然不是說結(jié)網(wǎng)捉蟲的蜘蛛那樣的生物學(xué)上的爬蟲,這里說的是互聯(lián)網(wǎng)上的爬蟲,由程序員編寫,具有一定的邏輯性能夠完成在指定范圍內(nèi)進(jìn)行信息收集的程序。

據(jù)說爬蟲占據(jù)了互聯(lián)網(wǎng)上60%多的流量,可想而知這個無比龐大的互聯(lián)網(wǎng)上有多少只辛辛苦苦矜矜業(yè)業(yè)的爬蟲們啊。

爬蟲,主要分為搜索引擎類的爬蟲和具有一定目標(biāo)的專用爬蟲。前者索引整個web世界,讓人們能方便的搜索到自己想要的信息,一般網(wǎng)站也很歡迎這些爬蟲。而后者有時候目的性比較強,爬取范圍也比較窄,一般收集數(shù)據(jù)用于二次加工或者數(shù)據(jù)分析等。這里主要講的就是第二種爬蟲。

2. 爬蟲怎么工作

爬蟲的工作很簡單,一句話概括就是找到目標(biāo)入口然后在目標(biāo)頁面獲取目標(biāo)內(nèi)容。

爬蟲的原理也不復(fù)雜,主要是通過http或者其他協(xié)議,發(fā)送請求到目標(biāo)接口,然后解析返回的內(nèi)容成結(jié)構(gòu)化數(shù)據(jù)存儲到本地。

3. 怎么制作爬蟲

制作一個爬蟲基本需要如下步驟:

  • 確定目標(biāo):
    制作爬蟲首先需要清楚自己的目的,希望獲取哪些信息。
  • 觀察目標(biāo):
    然后通過觀察目標(biāo)網(wǎng)站或者程序,獲取目標(biāo)信息的入口和索引方式。
  • 結(jié)構(gòu)提取:
    進(jìn)入內(nèi)容頁面,觀察感興趣區(qū)域的頁面結(jié)構(gòu),然后考慮通過正則表達(dá)式或者xpath等方式提取目標(biāo)內(nèi)容。
  • 編碼實現(xiàn):
    前3步完成之后,最后就是使用線程工具或者自己編碼實現(xiàn)這個爬蟲了。

完成這些,基本上就可以認(rèn)為制作出來一個網(wǎng)絡(luò)爬蟲了,然后就是讓這個爬蟲啟動運行起來。至于怎么處理爬到的數(shù)據(jù),那就不是爬蟲的事了。

下面介紹2種爬蟲制作方法。

4. 使用工具制作爬蟲

由于爬蟲這種需求比較多,所以網(wǎng)絡(luò)上有一些專門的工具,能通過簡單的配置就能制作爬蟲。

推薦一個國內(nèi)軟件商制作的比較傻瓜式的爬蟲生成工具:火車采集器,免費版基本就夠用了。

具體用法參考其視頻教程,基本上看完視頻就能知道怎么用了。

這個對于一些簡單的場景基本夠用了,主要優(yōu)勢是配置簡單,搭建方便,傻瓜化運行。

5. 編寫代碼制作爬蟲

在現(xiàn)有工具無法滿足需求或者想要學(xué)習(xí)爬蟲的原理的時候,也可以通過編寫代碼來制作爬蟲。

當(dāng)然,也不需要要從tcp/ip或者h(yuǎn)ttp協(xié)議這么底層開始,可以通過一些開源的爬蟲框架來編寫爬蟲。其中以python語言作為基礎(chǔ)的爬蟲框架比較多,這里以scrapy為例。

scrapy是一個開源的python爬蟲框架,也是目前最流行的爬蟲框架之一,里面集成了一些爬蟲常用的功能,基本上只需要寫爬蟲的邏輯就行。

以一個最簡單的例子來說明scrapy的用法。

5.1 確定目標(biāo)

需要有一個爬蟲每天去查詢百度搜索“爬蟲”的前2頁搜索結(jié)果,然后分析新排序到前2頁的搜索結(jié)果(其他后處理)。

5.2 觀察目標(biāo)

首先在百度輸入“爬蟲”搜索,跳轉(zhuǎn)到搜索結(jié)果頁。觀察結(jié)果頁面的URL結(jié)果,可以看到:

  • 第1頁URL:

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E7%88%AC%E8%99%AB&oq=%E7%88%AC%E8%99%AB&rsv_pq=9fd63f8600011b0b&rsv_t=3b30%2BHymEU5wSsRM5DGZD1gCwRjvljkpEIr3hXU0nOba6AHvpIdgH6DokZ4&rqlang=cn&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&rsv_sug4=470

  • 第2頁URL:

    https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB&pn=10&oq=%E7%88%AC%E8%99%AB&ie=utf-8&usm=1&rsv_pq=cb75075a0001681d&rsv_t=0986khHCUHLdfml7ymZib2JecfTLlPX%2Ft57JycxSQwzQh5miPsj1IKCeEGQ&rsv_page=1

URL里面有不少參數(shù),可能用不著,所以試著簡化這個URL:

  • 第1頁URL:

    https://www.baidu.com/s?wd=爬蟲&pn=0

  • 第2頁URL:

    https://www.baidu.com/s?wd=爬蟲&pn=10

那么爬蟲的入口就知道了。

5.3 結(jié)構(gòu)提取

scrapy用的是xpath做結(jié)構(gòu)解析,所以這里需要獲取到目標(biāo)區(qū)域的xpath。xpath是什么參考這里。

chrome瀏覽器有一個很好的插件可以很方便的獲取到某個html節(jié)點的xpath,XPath Helper,先安裝好它。

打開chrome,輸入URL(https://www.baidu.com/s?wd=爬蟲&pn=0),然后F12進(jìn)入開發(fā)者模式。通過鼠標(biāo)找到第1個搜索結(jié)果的html節(jié)點,然后右鍵:copy-Copy XPath。

得到搜索結(jié)果html節(jié)點的xpath分別是:

第1頁1-10搜索結(jié)果://*[@id='1']/h3/a//*[@id='2']/h3/a...//*[@id='10']/h3/a第2頁11-20搜索結(jié)果://*[@id='11']/h3/a//*[@id='12']/h3/a...//*[@id='20']/h3/a

那么目標(biāo)區(qū)域的xpath就很明顯了,獲取到xpath之后得到href屬性和text結(jié)果就行了。

當(dāng)然也可以通過其他的xpath獲取到這些節(jié)點位置,這個并不是唯一的。

5.4 編碼實現(xiàn)

scrapy安裝這里不再贅述,通過pip install scrapy即可安裝,國內(nèi)可以把pip的源設(shè)置為阿里云或者豆瓣的源,然后執(zhí)行上述命令安裝。

本節(jié)全部代碼在:baidu_spider

進(jìn)入工作目錄,命令行輸入:

scrapy startproject baidu_spider

然后進(jìn)入baidu_spider目錄,打開items.py,輸入如下代碼:

# -*- coding: utf-8 -*-import scrapyclass BaiduSpiderItem(scrapy.Item): # define the fields for your item here #搜索結(jié)果的標(biāo)題 title = scrapy.Field #搜索結(jié)果的url url = scrapy.Field

這里定義的是爬蟲爬取結(jié)果的結(jié)構(gòu),包含搜索結(jié)果的標(biāo)題和搜索結(jié)果的url。

打開settings.py,修改下面行:

#ROBOTSTXT_OBEY = TrueROBOTSTXT_OBEY = False

這個修改是因為百度的robots.txt禁止其他爬蟲去爬它,所以需要把robots協(xié)議這個君子協(xié)定暫時單方面關(guān)掉。

然后進(jìn)入spider目錄,新建baiduSpider.py,輸入下面代碼:

# -*- coding: UTF-8 -*-import scrapyfrom scrapy.spiders import CrawlSpiderfrom scrapy.selector import Selectorfrom scrapy.http import Requestfrom baidu_spider.items import BaiduSpiderItemfrom selenium import webdriverimport timeclass BaiduSpider(CrawlSpider): name='baidu_spider' def start_requests(self): #函數(shù)名不可更改,此函數(shù)定義了爬蟲的入口地址 #使用瀏覽器訪問 self.browser = webdriver.Chrome('d:/software/chromedriver.exe') for i in range(0,20,10): url = 'https://www.baidu.com/s?wd=爬蟲&pn=%d' % i yield self.make_requests_from_url(url) def parse(self, response): #函數(shù)名不可更改,此函數(shù)定義了爬蟲的頁面解析 #打開瀏覽器訪問頁面 self.browser.get(response.url) time.sleep(1) selector = Selector(text=self.browser.page_source) page_start = int(response.url.split('=')[-1]) for i in range(1,11): item = BaiduSpiderItem xpath = '//*[@id='%d']/h3/a' % (page_start+i) print xpath print selector.xpath(xpath + '/@href').extract item['url'] = selector.xpath(xpath + '/@href').extract[0] item['title'] = selector.xpath(xpath + '//text').extract yield item

這里用到了selenium和chrome webdriver,用于使用chrome模擬正常用戶的訪問,這是因為百度做了防爬蟲的措施,所以為了簡單,我們就假裝我們的爬蟲就是正常用戶。

selenium通過pip安裝即可,chrome webdriver在此處下載,然后安裝上。把baiduSpider.py中的webdriver.Chrome行中的可執(zhí)行文件地址改成自己的安裝地址。

全部代碼編寫完畢,在scrapy.cfg那一層目錄(頂層)中輸入下面的命令啟動爬蟲:

scrapy crawl baidu_spider -o result.csv

一切順利的話會輸出一些log,并且啟動chrome打開網(wǎng)頁,最后生成result.csv文件,文件內(nèi)包含了爬取到的結(jié)果。

本節(jié)全部代碼在:baidu_spider

6. 爬蟲進(jìn)階

爬蟲的進(jìn)階就是需要與數(shù)據(jù)來源方斗智斗勇了,處理包括但不限于以下問題:

  • IP被封禁
  • 訪問次數(shù)受限制
  • 爬取速度太慢
  • 頁面重定向
  • 頁面ajax生成內(nèi)容
  • 頁面內(nèi)容由復(fù)雜的javascript生成
  • etc.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【含代碼】Python爬蟲實戰(zhàn):爬取全站小說排行榜
Scrapy安裝、爬蟲入門教程、爬蟲實例(豆瓣電影爬蟲)
放養(yǎng)的小爬蟲--京東定向爬蟲(AJAX獲取價格數(shù)據(jù))
網(wǎng)絡(luò)爬蟲之Scrapy實戰(zhàn)二:爬取多個網(wǎng)頁
Python爬蟲教程使用Scrapy框架爬取小說代碼示例
Scrapy爬蟲抓取動態(tài)網(wǎng)站 | ShinChan's Blog
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 岳普湖县| 延长县| 房产| 昌邑市| 大关县| 烟台市| 台山市| 龙胜| 奇台县| 涿州市| 安仁县| 腾冲县| 拉孜县| 习水县| 安塞县| 永胜县| 公安县| 汶上县| 长葛市| 旌德县| 伊金霍洛旗| 固镇县| 高青县| 桦甸市| 南江县| 景泰县| 饶阳县| 札达县| 资阳市| 日照市| 东乌| 永川市| 伊春市| 库车县| 沅江市| 崇明县| 临泽县| 都昌县| 时尚| 株洲县| 建昌县|