為什么要用python不用origin_Python告訴你為什么百度已死

Python3爬蟲百度一下,坑死你?

一、寫在前面

這個標題是借用的路人甲大佬的一篇文章的標題(百度一下,坑死你),而且這次的爬蟲也是看了這篇文章后才寫出來的,感興趣的可以先看下這篇文章。

前段時間有篇文章《搜索引擎百度已死》引起了很多討論,而百度對此的回復是:百家號的內容在百度搜索結果中不超過10%。但是這個10%是第一頁的10%還是所有數據的10%,我們不得而知,但是由于很多人都只會看第一頁的內容,而如果這第一頁里有十分之一的內容都來自于百家號,那搜索體驗恐怕不怎么好吧?然后我這次寫的爬蟲就是把百度上面的熱搜事件都搜索一下,然后把搜索結果的第一頁上的標題鏈接提取出來,最后對這些鏈接進行一些簡單的分析,看看百家號的內容占比能有多少。

二、具體步驟

1.頁面分析

首先打開網頁查看百度的熱點事件,頁面如下:

這次我主要對今日熱點、娛樂熱點、體育熱點進行了爬取,每個熱點下面有50條熱點事件,然后對每個事件進行搜索,比如第一條--馬云的福字:

可以看到搜索結果的第一頁上有很多標題,然后對這些標題的鏈接進行爬取,再保存到一個txt文件里,最后對這些數據進行分析。

2.主要代碼

(1)獲取真實鏈接

這些搜索結果頁面上的鏈接都是經過加密的,如下圖:

所以我們爬取得到的鏈接都是http://www.baidu.com/link?url=VfA2jxmqJdYt1U-G0wHjWIXglVEi-WCxpa8aaMCeOzkqK-c5CgYngPiJT6_-kmWE3ePTHCpgYlX5oq9SQDJgEukKCY19o26JlS1pEIgnlupbw0Ss9Ro3gQjYVuJljdxyBPfiDUJhM9ODV_0mKnrUhESJ95Az1OnB6mMScmCXiUi這種,但是我們點進去之后就能得到真實的鏈接https://www.baidu.com/s?tn=news&rtt=1&bsst=1&wd=%E9%A9%AC%E4%BA%91%E7%9A%84%E7%A6%8F%E5%AD%97&cl=2&origin=ps,那我們要怎么得到真實的鏈接呢?相關代碼如下:def?get_real_url(self,?fake_url):

#?獲取真實的鏈接

try:

res?=?requests.get(fake_url,?headers=self.headers)

real_url?=?res.url

except?Exception?as?e:

print(e)

(2)數據處理

這里我總共爬取了1051條鏈接,如下圖:

但是這樣的數據是明顯沒有辦法進行分析的,所以需要進行一下處理,比如將https://baijiahao.baidu.com/s?id=1624053575252859170&wfr=spider&for=pc變成baijiahao.baidu,相關代碼如下:href?=?"https://baijiahao.baidu.com/s?id=1624053575252859170&wfr=spider&for=pc"

match?=?re.match("(http[s]?://.+?[com,cn,net]/)",?href)

href?=?match.group()

href?=?href.replace('cn',?'com').replace('net',?'com')

href?=?href[href.index(':')?+?3:].rstrip('.com/')

print(href)

#?baijiahao.baidu

(3)數據分析

這里主要使用了matplotlib繪圖幫助我們分析數據。首先需要統計出各個網站出現的次數,然后進行一個排序,得到排名前十的網站,結果如下(前面是網站,后面是出現次數):https://baijiahao.baidu.com/??188

https://www.baidu.com/??114

http://www.sohu.com/??60

https://news.china.com/??29

http://www.guangyuanol.cn/??27

http://image.baidu.com/?24

http://3g.163.com/??20

https://sports.qq.com/??19

https://www.iqiyi.com/?17

https://baike.baidu.com/??17

可以看到百家號出現的次數是最多的。然后進行繪圖分析,這里主要是繪圖的代碼,因為使用的是百分數,所以在繪圖的時候會稍微麻煩一點:def?plot(self,?index_list,?value_list):

b?=?self.ax.barh(range(len(index_list)),?value_list,?color='blue',?height=0.8)

#?添加數據標簽

for?rect?in?b:

w?=?rect.get_width()

self.ax.text(w,?rect.get_y()?+?rect.get_height()?/?2,?'{}%'.format(w),

ha='left',?va='center')

#?設置Y軸刻度線標簽

self.ax.set_yticks(range(len(index_list)))

self.ax.set_yticklabels(index_list)

#?設置X軸刻度線

lst?=?["{}%".format(i)?for?i?in?range(0,?20,?2)]

self.ax.set_xticklabels(lst)

plt.subplots_adjust(left=0.25)

plt.xlabel("占比")

plt.ylabel("網站")

plt.rcParams['font.sans-serif']?=?['SimHei']

plt.savefig("bjh.jpg")

print("已保存為bjh.jpg!")

三、運行結果

由于每個事件的搜索結果都是不同的,所以在解析網頁的時候可能會出錯,然后就是請求頻率太高了會被ban掉,而且有時候UA會被識別出來然后就被ban掉了,運行情況如下圖:

最后看一下繪制出來的圖片:

可以看到百家號的內容占比達到了17%,而排在第二的也是百度自家的產品,內容占比也達到了10%。當然了,由于搜索的都是百度上的熱搜事件,所以得到的結果百度自家的內容會多一點,但是光百家號的內容就占了17%,是不是也太多了點呢?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457399.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457399.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于 HTTP 的一切(HTTP/1.1,HTTP/2,HTTP/3,HTTPS, CORS, 緩存 ,無狀態)

HTTP 為什么會出現 HTTP 協議,從 HTTP1.0 到 HTTP3 經歷了什么?HTTPS 又是怎么回事? HTTP 是一種用于獲取類似于 HTML 這樣的資源的 應用層通信協議, 他是萬維網的基礎,是一種 CS 架構的協議,通常來說&…

AS 2.0新功能 Instant Run

Instant Run上手作為一個Android開發者,很多的時候我們需要花大量的時間在bulid,運行到真機(虛擬機)上,對于ios上的Playground羨慕不已,這種情況將在Android Studio 2.0有了很大改善,使用instan…

爬蟲cookie過期_python instagram 爬蟲

葉湘倫:【文字篇】如何系統地自學 Python??zhuanlan.zhihu.com直接介紹一下具體的步驟以及注意點:instagram 爬蟲注意點instagram 的首頁數據是 服務端渲染的,所以首頁出現的 11 或 12 條數據是以 html 中的一個 json 結構存在的…

php 無限循環

<?php header("Content-type:text/html;charsetutf-8"); $arr array( array(1, 0, 語文), array(2, 1, 數學), array(3, 0, 英文), array(4, 3, 美術), ); function xunhuan($pid 0) { global $arr; foreach ($arr as $value) { if ($value[1] $pid) { ech…

MySQL InnoDB 是如何存儲數據的

InnoDB 是怎么存儲數據的 本文是《MySQL 是怎樣運行的 —— 從根兒上理解 MySQL》讀書總結&#xff0c;強烈推薦這本書&#xff1b; CSDN 不能顯示 SVG&#xff0c;可能有圖片加載不出來&#xff0c;可以到 我的博客 上看。 數據目錄 眾所周之&#xff0c;MySQL 的數據是存儲在…

蔬菜大棚成本_蔬菜大棚種植成本和利潤究竟如何?種植戶有話說

大棚蔬菜種植&#xff0c;到底利潤高不高&#xff0c;就讓親身體驗過的人來說下自己的情況吧。農大老家山東也是大棚蔬菜種植比較早的地方&#xff0c;直到現在大棚種植蔬菜在各地都還是不少。大棚蔬菜種植&#xff0c;是有相應的補貼政策&#xff0c;在農業種植當中&#xff0…

WebSocket實戰之————GatewayWorker使用筆記例子

參考文檔&#xff1a;http://www.workerman.net/gatewaydoc/ 目錄結構 ├── Applications // 這里是所有開發者應用項目 │ └── YourApp // 其中一個項目目錄&#xff0c;目錄名可以自定義 │ ├── Events.php // 開發者只需要關注這個文件 │ ├── st…

[轉]關于凸優化的一些簡單概念

沒有系統學過數學優化&#xff0c;但是機器學習中又常用到這些工具和技巧&#xff0c;機器學習中最常見的優化當屬凸優化了&#xff0c;這些可以參考Ng的教學資料&#xff1a;http://cs229.stanford.edu/section/cs229-cvxopt.pdf&#xff0c;從中我們可以大致了解到一些凸優化…

Go 1.18.1 Beta 嘗鮮 泛型 FuzzTest workspace mode

Go 1.18.1 Beta 嘗鮮 昨天&#xff0c;go 終于發布了 1.18 的 beta 版本, 帶來了大家期待已久的泛型&#xff0c;抓緊時間康康能不能趕上熱乎的。 下載地址 根據社區昨天發的 Go 1.18 Beta 1 is available, with generics 這次版本更新主要帶來的新功能有&#xff1a; 泛型模…

centos7部署兩個mysql_一文掌握mysql實用工具--pt-online-schema-change、innotop部署

概述因為OSC和innotop這兩個需要的依賴包比較接近&#xff0c;所以這次就寫一起了&#xff0c;下面介紹下完整的部署教程&#xff0c;以下基于centos7操作系統。官網文檔&#xff1a;http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.htmlOSC&#xff1a;…

python面試題目

問題一&#xff1a;以下的代碼的輸出將是什么? 說出你的答案并解釋。 1234567891011121314class Parent(object):x 1class Child1(Parent):passclass Child2(Parent):passprint Parent.x, Child1.x, Child2.xChild1.x 2print Parent.x, Child1.x, Child2.xParent.x 3print …

修改頁面后獲得flag_互動征集丨是時候為2021立flag了

2020馬上就要過去了今年的flag各位小伙伴實現了多少&#xff1f;翻出了生灰的flag擦擦說不定2021還能接著用哦2020年就要過去了還記得你在年初立下的那些Flag嗎&#xff1f;減肥“明天我就開始減肥&#xff01;”是大部分人在大部分時候都掛在嘴邊的一句話疫情宅家不僅沒減成還…

Python3.10 結構化模式匹配 PEP 634

Python3.10 結構化模式匹配 PEP 634 眼看 2021 馬上結束&#xff0c;python 發布了它的 3.10 版本&#xff0c;優化了錯誤消息&#xff0c;上下文管理器等內容&#xff0c;但更吸引我的還是結構化模式匹配。 眾所周之 switch 一直是 python 社區呼聲比較高的一個功能&#xff…

為ESXI 添加ISCSI存儲設備 Linux服務器系統

為ESXI 添加ISCSI存儲設備 Linux系統本文使用的LINUX 6系統上一塊硬盤制作的ISCSI存儲設備其IP地址為&#xff1a;192.168.26.218:在系統上直接輸入&#xff1a;yum -y install scsi-target-utils 命令 安裝 iscsi分區設置我們將SDD這塊硬盤的SDD1作為iscsi存儲設備編輯ISCSI配…

出棧順序 與 卡特蘭數(Catalan)的關系

一&#xff0c;問題描述 給定一個以字符串形式表示的入棧序列&#xff0c;請求出一共有多少種可能的出棧順序&#xff1f;如何輸出所有可能的出棧序列&#xff1f; 比如入棧序列為&#xff1a;1 2 3 &#xff0c;則出棧序列一共有五種&#xff0c;分別如下&#xff1a;1 2 3、…

[譯] Bounds Check Elimination 邊界檢查消除

[譯] Bounds Check Elimination 邊界檢查消除 Go 是一種內存安全的語言&#xff0c;在針對數組 (array) 或 Slice 做索引和切片操作時&#xff0c;Go 的運行時&#xff08;runtime&#xff09;會檢查所涉及的索引是否超出范圍。如果索引超出范圍&#xff0c;將產生一個 Panic&…

cad多段線畫圓弧方向_CAD箭頭怎么畫

CAD箭頭怎么畫問&#xff1a;CAD箭頭怎么畫&#xff1f;答&#xff1a;想要回答CAD箭頭怎么畫這個問題&#xff0c;得先從CAD多段線命令說起&#xff0c;畫箭只是多段線的一種應用。執行CAD多段線命令的三種方式1.單擊菜單欄上的"繪圖">>"多段線"。2…

HDU 5410 CRB and His Birthday ——(完全背包變形)

對于每個物品&#xff0c;如果購買&#xff0c;價值為A[i]*xB[i]的背包問題。 先寫了一發是WA的 。代碼如下&#xff1a; 1 #include <stdio.h>2 #include <algorithm>3 #include <string.h>4 #include <set>5 using namespace std;6 typedef pair<…

一篇講Java指令重排和內存可見性的好文

在這里&#xff1a; http://tech.meituan.com/java-memory-reordering.html 指令重排和內存可見性&#xff08;緩存不一致&#xff09;是兩個不同的問題。 volatile關鍵字太強&#xff0c;即阻擋指令重排&#xff0c;又保證內存一致性。 unsafe.putOrderedXXX()只阻擋指令重排&…

php 獲取delete蠶絲_php結合Redis實現100萬用戶投票項目,并實時查看到投票情況的案例...

場景&#xff1a;某網站需要對其項目做一個投票系統&#xff0c;投票項目上線后一小時之內預計有100萬用戶進行投票&#xff0c;希望用戶投票完就能看到實時的投票情況這個場景可以使用redismysql冷熱數據交換來解決。何為冷熱數據交換&#xff1f;冷數據&#xff1a;之前使用的…