1. 程式人生 > >Python3實現QQ機器人自動爬取百度文庫的搜索結果並發送給好友(主要是爬蟲)

Python3實現QQ機器人自動爬取百度文庫的搜索結果並發送給好友(主要是爬蟲)

OS __main__ end aid 機器 https code __name__ gbk

一、效果如下:

技術分享圖片

二、運行環境:

win10系統;python3;PyCharm

三、QQ機器人用的是qqbot模塊

用pip安裝命令是: pip install qqbot (前提需要有requests庫)

實現自己的機器人:網上好幾種寫法,很簡單,不過有時候環境不同會出現錯誤,下面是親測可以運行的:

from qqbot import QQBotSlot as qqbotslot, RunBot

@qqbotslot

def onQQMessage(bot, contact, member,

content):

       if content == "-hello":#content是好友發的信息
bot.SendTo(contact,"我是,QQ機器人")
if __name__ == "__main__":
RunBot()
四、爬取百度文庫
需要模塊:
import urllib.request,urllib,re
獲取原網頁代碼:
提前說下百度文庫網頁編碼是gb2312
def baidu(self,world):
        data={}
data[‘word‘] = world
url_World=urllib.parse.urlencode(data,
encoding="GBK")

url = "https://wenku.baidu.com/search?"+url_World+"&org=0&ie=gbk"
page = urllib.request.urlopen(url)

html = page.read()
html = html.decode(‘gbk‘)
代碼解析:
data[‘word‘] = world #world是搜索的內容,也就是關鍵詞
url不必多說就是網頁鏈接
但是二者之間多了一行代碼:
url_World=urllib.parse.urlencode(data
,encoding="GBK")
看一下百度文庫搜索"大學":https://wenku.baidu.com/search?word=%B4%F3%D1%A7&org=0&ie=gbk
其中
%B4%F3%D1%A7 就是"大學"的十六進制。
也就是說我們想搜索“大學”的相關內容需要把“大學”的中文轉成上面格式,如果不轉會出現什麽狀況
我們直接把中文“大學”塞到鏈接裏去訪問:https://wenku.baidu.com/search?word=大學&lm=0&od=0&fr=top_home&ie=gbk
技術分享圖片
會有亂碼這個亂碼直接導致後面獲取原網頁解碼錯誤也就是:
        html = html.decode(‘gbk‘)
解碼是讓中文能夠正常顯示,但是上面的亂碼是不能通過gbk編碼進行解碼的,也就會出現錯誤。
所以不能直接把參數world直接放進去。

而urllib.parse.urlencode(data)這行代碼就是把中文轉成url格式的。
不過默認的編碼是utf-8,直接把data放進去會按照utf-8進行轉的話會得到如下鏈接:
https://wenku.baidu.com/search?word=%E5%A4%A7%E5%AD%A6&org=0&ie=gbk
此鏈接得到網頁效果是和之前把中文放進鏈接效果一樣
網上找到的基本上都是這樣的寫法,不過百度文庫是采用gb2312編碼所以需要在那行轉碼代碼中再添加一個編碼參數就能夠達到目的
如下:urllib.parse.urlencode(data,encoding="GBK")

這樣無論是url轉碼還是後面的解碼都會正常運行了。
此過程就能夠得到正常的搜索結果的原網頁了
用正則獲取想要的信息:
技術分享圖片
上面代碼就能把需要的是標題和相應的鏈接給提取出來
其他的就是容錯問題了。
全部代碼如下:
技術分享圖片





Python3實現QQ機器人自動爬取百度文庫的搜索結果並發送給好友(主要是爬蟲)