摘要:前言項目地址該程序正常運行所需要的插件為,建議下載版本,然后將下載的整個文件夾放在和文件同一級的目錄下,若是系統的話則修改程序中的指向的插件目錄名稱實現原理百度的搜索排名它選錄的都是你所檢索的關鍵詞以及目標網址在第幾個結果列表當中,但其中并
前言
項目地址 https://github.com/Ricbet/ran...
該程序正常運行所需要的插件為phantomjs,建議下載mac版本,然后將下載的整個文件夾放在和.py文件同一級的目錄下,若是window系統的話則修改程序中的
driver指向的插件目錄名稱
百度的搜索排名它選錄的都是你所檢索的關鍵詞以及目標網址在第幾個結果列表當中,但其中并不包括帶“廣告”標示的結果,例如
我搜素switch的時候我想知道Nintendo的官網在百度排名中屬于第幾名,圖所示的例子中我在第二頁里找到了任天堂的官網nintendo.com,所以switch這個關鍵詞對于任天堂來說在百度的搜索排名是第十二名
我要做的就是根據關鍵詞搜索模擬一次搜索,然后在搜索的結果集當中找到目標網址,匹配之后我再利用phantomjs截取屏幕并在關鍵的地方給予紅框標注,然后再將該截圖保存到本地目錄當中
首先我們還是得先了解下百度搜索的一些常用參數
pn: 表示從第pn條結果開始顯示
rn: 表示每一頁要顯示多少條結果,默認10條
wd: 表示要搜索的詞
其實我們只需要這三個參數就足夠了
首先先記錄要請求的url,使用quote處理帶中文的url
r_url = "http://www.baidu.com/s?rn=%s" % rn + "&pn=%s"%((pn_baidu-1)*rn) + "&wd=%s" % wd r_url = quote(r_url, safe=string.printable)
然后我們用BeautifulSoup提取網頁的文本內容
with requests.get("http://www.baidu.com/s", params={"wd": wd, "pn": (pn_baidu-1)*rn, "rn": rn}, timeout=7) as r: soup = BeautifulSoup(r.text, "html.parser")
我們觀察百度的搜索結果列表頁的html結構
發現這些結果集都被包含在了content_left這個id里面,然后只有result這個類的標簽才是真正搜索出來的結果,其他的result-op這個類的標簽并不算在排名中,因為這是那些最新相關信息呀、貼吧等
p = re.compile(r"^result") contentItem = soup.find(id="content_left").find_all("div", p)
contentItem就是我們列出的所有算在排名內的結果集列表
然后我們通過for循環遍歷正則匹配我們輸入的網址,看看在哪個下標的結果里面,就是當前的排名
for index, list in enumerate(contentItem): _list = "".join(re.split(r"s+", list.get_text())) # 如果匹配成功 if str.search(_list): # xxxxx
如果找到匹配的結果集了,此時就是PhantomJS派上用場的時候了
保存為截圖并標注python的PhantomJS用法可以在谷某或者某度里面查得到,這里就不一一闡述了
我們通過觀察到每一個result類的標簽都有一個數字id,然后我們只要用js的方法獲取這個id然后給它設置紅框的樣式就可以了
driver.execute_script(""" (function(){ var result = document.getElementById(%s) result.setAttribute("style","border:5px solid red;padding:10px;margin-left:-15px") })() """ %((index + 1)+((pn_baidu-1)*rn)))
同時根據時間戳來命名圖片名稱
out_img_name = "baidu_" + time_now_rub + ".jpeg" driver.save_screenshot(out_img_name)
同時為了減少圖片的資源大小,我們用PIL進一步處理圖片,并保存為jpeg的格式
# 打開圖片 im = Image.open(out_img_name) # 獲取生成的圖片寬度和高度 w, h = im.size # 等比例壓縮圖片 im.thumbnail((int(w / 1.5), int(h / 1.5)), Image.ANTIALIAS) # 保存 im.convert("RGB").save(out_img_name, "JPEG", quality=80)
最后一步我們就是把生成的圖片放在一個目錄里面了
def findDirectory( img_name ): # 查詢目錄,如果沒有就創建目錄 src_item = ["public","uploads",time_year,time_month,time_day,""] join_src_item = "/".join(src_item[0:-1])+"/" # 判斷當前目錄文件是否有uploads if( os.path.exists(join_src_item) == False ): os.makedirs(join_src_item) shutil.move(img_name, join_src_item) else: shutil.move(img_name, join_src_item)測試
截圖
目錄結構
大致思路就是這樣子
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41335.html
摘要:學習爬蟲的背景了解。但是搜索引擎蜘蛛的爬行是被輸入了一定的規則的,它需要遵從一些命令或文件的內容,如標注為的鏈接,或者是協議。不同領域不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無法提供針對具體某個用戶的搜索結果。 學習python爬蟲的背景了解。 大數據時代數據獲取方式 如今,人類社會已經進入了大數據時代,數據已經成為必不可少的部分,可見數據的獲取非常重要,而數據的獲取的方式...
摘要:百度快照丟失前言百度為了更好的用戶體驗,推出了異地排名功能,讓搜索結果更有個性化。但是今天這個怪象,不是百度的問題。數據截圖說明幾個地區的網絡運營商居然丟失了百度的快照。百度快照丟失前言:百度為了更好的用戶體驗,推出了異地排名功能,讓搜索結果更有個性化。但是今天這個怪象,不是百度的問題。今天一個做SEO的朋友咨詢我,說我博客的快照沒了,我打開電腦一看還在,還能給大家分享一些知識,然后朋友給我...
閱讀 2391·2023-04-26 02:54
閱讀 2315·2021-10-14 09:43
閱讀 3355·2021-09-22 15:19
閱讀 2843·2019-08-30 15:44
閱讀 2699·2019-08-30 12:54
閱讀 983·2019-08-29 18:43
閱讀 1936·2019-08-29 17:12
閱讀 1329·2019-08-29 16:40