成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python實(shí)現(xiàn)查詢百度關(guān)鍵詞排名并截圖標(biāo)注保存

LoftySoul / 2787人閱讀

摘要:前言項(xiàng)目地址該程序正常運(yùn)行所需要的插件為,建議下載版本,然后將下載的整個(gè)文件夾放在和文件同一級(jí)的目錄下,若是系統(tǒng)的話則修改程序中的指向的插件目錄名稱實(shí)現(xiàn)原理百度的搜索排名它選錄的都是你所檢索的關(guān)鍵詞以及目標(biāo)網(wǎng)址在第幾個(gè)結(jié)果列表當(dāng)中,但其中并

前言

項(xiàng)目地址 https://github.com/Ricbet/ran...

該程序正常運(yùn)行所需要的插件為phantomjs,建議下載mac版本,然后將下載的整個(gè)文件夾放在和.py文件同一級(jí)的目錄下,若是window系統(tǒng)的話則修改程序中的

driver指向的插件目錄名稱

實(shí)現(xiàn)原理

百度的搜索排名它選錄的都是你所檢索的關(guān)鍵詞以及目標(biāo)網(wǎng)址在第幾個(gè)結(jié)果列表當(dāng)中,但其中并不包括帶“廣告”標(biāo)示的結(jié)果,例如

我搜素switch的時(shí)候我想知道Nintendo的官網(wǎng)在百度排名中屬于第幾名,圖所示的例子中我在第二頁(yè)里找到了任天堂的官網(wǎng)nintendo.com,所以switch這個(gè)關(guān)鍵詞對(duì)于任天堂來(lái)說(shuō)在百度的搜索排名是第十二名

我要做的就是根據(jù)關(guān)鍵詞搜索模擬一次搜索,然后在搜索的結(jié)果集當(dāng)中找到目標(biāo)網(wǎng)址,匹配之后我再利用phantomjs截取屏幕并在關(guān)鍵的地方給予紅框標(biāo)注,然后再將該截圖保存到本地目錄當(dāng)中

首先我們還是得先了解下百度搜索的一些常用參數(shù)
pn: 表示從第pn條結(jié)果開始顯示
rn: 表示每一頁(yè)要顯示多少條結(jié)果,默認(rèn)10條
wd: 表示要搜索的詞
其實(shí)我們只需要這三個(gè)參數(shù)就足夠了

模擬搜索

首先先記錄要請(qǐng)求的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提取網(wǎng)頁(yè)的文本內(nèi)容

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")

我們觀察百度的搜索結(jié)果列表頁(yè)的html結(jié)構(gòu)

發(fā)現(xiàn)這些結(jié)果集都被包含在了content_left這個(gè)id里面,然后只有result這個(gè)類的標(biāo)簽才是真正搜索出來(lái)的結(jié)果,其他的result-op這個(gè)類的標(biāo)簽并不算在排名中,因?yàn)檫@是那些最新相關(guān)信息呀、貼吧等

p = re.compile(r"^result")
contentItem = soup.find(id="content_left").find_all("div", p)

contentItem就是我們列出的所有算在排名內(nèi)的結(jié)果集列表
然后我們通過(guò)for循環(huán)遍歷正則匹配我們輸入的網(wǎng)址,看看在哪個(gè)下標(biāo)的結(jié)果里面,就是當(dāng)前的排名

for index, list in enumerate(contentItem):
    _list = "".join(re.split(r"s+", list.get_text()))
    # 如果匹配成功
    if str.search(_list):
    # xxxxx

如果找到匹配的結(jié)果集了,此時(shí)就是PhantomJS派上用場(chǎng)的時(shí)候了

保存為截圖并標(biāo)注

pythonPhantomJS用法可以在谷某或者某度里面查得到,這里就不一一闡述了

我們通過(guò)觀察到每一個(gè)result類的標(biāo)簽都有一個(gè)數(shù)字id,然后我們只要用js的方法獲取這個(gè)id然后給它設(shè)置紅框的樣式就可以了

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)))

同時(shí)根據(jù)時(shí)間戳來(lái)命名圖片名稱

out_img_name = "baidu_" + time_now_rub + ".jpeg"
driver.save_screenshot(out_img_name)

同時(shí)為了減少圖片的資源大小,我們用PIL進(jìn)一步處理圖片,并保存為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)

最后一步我們就是把生成的圖片放在一個(gè)目錄里面了

def findDirectory( img_name ):
    # 查詢目錄,如果沒(méi)有就創(chuàng)建目錄
    src_item = ["public","uploads",time_year,time_month,time_day,""]
    join_src_item = "/".join(src_item[0:-1])+"/"
    # 判斷當(dāng)前目錄文件是否有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)
測(cè)試

截圖

目錄結(jié)構(gòu)

大致思路就是這樣子

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41335.html

相關(guān)文章

  • Python爬蟲筆記1-爬蟲背景了解

    摘要:學(xué)習(xí)爬蟲的背景了解。但是搜索引擎蜘蛛的爬行是被輸入了一定的規(guī)則的,它需要遵從一些命令或文件的內(nèi)容,如標(biāo)注為的鏈接,或者是協(xié)議。不同領(lǐng)域不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無(wú)法提供針對(duì)具體某個(gè)用戶的搜索結(jié)果。 學(xué)習(xí)python爬蟲的背景了解。 大數(shù)據(jù)時(shí)代數(shù)據(jù)獲取方式 如今,人類社會(huì)已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代,數(shù)據(jù)已經(jīng)成為必不可少的部分,可見數(shù)據(jù)的獲取非常重要,而數(shù)據(jù)的獲取的方式...

    oujie 評(píng)論0 收藏0
  • 部分網(wǎng)絡(luò)服務(wù)商丟失百度快照-SEO必看怪象

    摘要:百度快照丟失前言百度為了更好的用戶體驗(yàn),推出了異地排名功能,讓搜索結(jié)果更有個(gè)性化。但是今天這個(gè)怪象,不是百度的問(wèn)題。數(shù)據(jù)截圖說(shuō)明幾個(gè)地區(qū)的網(wǎng)絡(luò)運(yùn)營(yíng)商居然丟失了百度的快照。百度快照丟失前言:百度為了更好的用戶體驗(yàn),推出了異地排名功能,讓搜索結(jié)果更有個(gè)性化。但是今天這個(gè)怪象,不是百度的問(wèn)題。今天一個(gè)做SEO的朋友咨詢我,說(shuō)我博客的快照沒(méi)了,我打開電腦一看還在,還能給大家分享一些知識(shí),然后朋友給我...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

LoftySoul

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<