一、效果如下:

二、运行环境:

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转码还是后面的解码都会正常运行了。
此过程就能够得到正常的搜索结果的原网页了
用正则获取想要的信息:

上面代码就能把需要的是标题和相应的链接给提取出来
其他的就是容错问题了。
全部代码如下:
from qqbot import QQBotSlot as qqbotslot, RunBot
import urllib.request,urllib,re
class pyth(object):
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')
title= re.compile(r'<span title=".*?" class="ic ic-.*?title="(.*?)"',re.S)
url1= re.compile(r'<span title=".*?" class="ic .*?<a href="(.*?)"',re.S)
title1= re.findall(title,html)
url11= re.findall(url1,html)
pri = "百度文库搜索结果:"
if len(title1)>2:
for i in range(2):
pri += "\n"+title1[i]+"\n链接:"+url11[i];
else:
pri = "相关内容过少,请换个题目"
return pri @qqbotslot
def onQQMessage(bot, contact, member, content):
if "搜索" in content[0:2]:
if len(content)>2:
world = content.split("搜索",1)[1].encode('gbk')
run=pyth()
run.baidu(world)
jieguo = run.baidu(world).encode("utf-8")
bot.SendTo(contact,jieguo) if __name__ == "__main__":
RunBot()


        

   
												

Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)的更多相关文章

  1. python 利用selenium爬取百度文库的word文章

    今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.k ...

  2. python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移

    先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...

  3. python+selenium爬取百度文库不能下载的word文档

    有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可 ...

  4. python+requests爬取百度文库ppt

    实验网站:https://wenku.baidu.com/view/c7752014f18583d04964594d.html 在下面这种类型文件中的请求头的url打开后会得到一个页面 你会得到如下图 ...

  5. python爬取百度文库所有内容

    转载自 GitHub 的 Jack-Cherish 大神 基本环境配置 版本:python3 系统:Windows 相关模块: import requests import re import jso ...

  6. python 爬取百度url

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-29 18:38:23 # @Author : EnderZhou (z ...

  7. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  8. 如何手动写一个Python脚本自动爬取Bilibili小视频

    如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...

  9. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

随机推荐

  1. Android查缺补漏(View篇)--事件分发机制源码分析

    在上一篇博文中分析了事件分发的流程及规则,本篇会从源码的角度更进一步理解事件分发机制的原理,如果对事件分发规则还不太清楚的童鞋,建议先看一下上一篇博文 <Android查缺补漏(View篇)-- ...

  2. 关于mybatis 注解sql sum(参数)传参写法

    新手出道 验证了很久sum()里面带参数方式 #{参数}一直不行日志显示参数已经传进 但就是加不上去 返回的始终是0 后面换成$(参数)之后就行了 @Select("select sum($ ...

  3. ASP.NET Core Razor页面禁用防伪令牌验证

    在这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证. Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的.数据驱动的网站: ...

  4. JavaScript Date 时间对象方法

    Date(日期/时间对象) Date 操作日期和时间的对象 Date.getDate( ) 返回一个月中的某一天 Date.getDay( ) 返回一周中的某一天 Date.getFullYear( ...

  5. intellij-项目目录隐藏无用的文件和文件夹

    File-->Editor-->File Types

  6. apache日志管理【转】

    web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate:第二种方法是利用apache自带的日志轮循程序rotatelogs:第三种是使用在ap ...

  7. linux_NFS

    NFS是什么? 网络文件系统,又叫共享存储,通过网络连接让不同主机之间实现共享存储. 应用于存放图片.附件.视频等用户上传文件 相关同类应用:大型网站nfs有压力,使用moosefs(mfs),Ghu ...

  8. JavaScript高级编程小结

    Undefined 对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined var message; console.l ...

  9. python初识 - day4

    一.集合(set) 1.集合的定义 set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置, 因此不支持索引.分片等类序列的操作. 2.集合的创建 大括号或 ...

  10. 使用EndNote在Word中插入参考文献的格式设置

    endnote其实自带了很多参考文献格式的样式,如下图,但往往跟我们要使用的会有所出入,本文主要介绍的就是设置自定义endnote参考文献格式,以endnote X6和word2003为例,其它版本以 ...