【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
问题描述
通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接。
mechanicalsoup模块
MechanicalSoup无需图形界面环境下的浏览器开源项目,是一个基于极其流行而异常多能的 HTML 解析库 Beautiful Soup 建立的爬虫库。如果你的爬虫需要相当的简单,但是又要求检查一些选择框或者输入一些文字,而你又不想为这个任务单独写一个爬虫,那么这会是一个值得考虑的选择。
安装
pip install MechanicalSoup
需要BeautifulSoup和requests库的依赖。
解析百度网页源码
分析百度网页源代码,找到用来接收搜索关键字的表单和输入框。

程序实现
map函数
map函数第一个参数为函数,但不需要'()',第二个参数是迭代器对象,作用是对迭代器对象遍历使用第一个函数。
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- """
- @author:BanShaohuan
- @file: Python 3.6模拟输入并爬取百度前10页密切相关链接
- @time: 2018/06/09
- @contact: banshaohuan@163.com
- @software: PyCharm
- """
- import mechanicalsoup
- # python小屋文章清单
- with open('list.txt', encoding="utf8") as fp:
- articles = fp.readlines()
- #=> 使用map函数,去掉从文本当中读取时的字符,并放入元组中
- articles = tuple(map(str.strip, articles))
- # 模拟打开指定网址,模拟输入并提交输入的关键字
- browser = mechanicalsoup.StatefulBrowser() #=> 新建一个对象
- browser.open(r'http://www.baidu.com')#=> 模拟打开百度
- browser.select_form("#form")#=> 根据class指定一个表单
- browser['wd'] = 'Python小屋'#=> 根据表单的id指定表单中输入的内容
- browser.submit_selected()#=> 提交,模拟搜索
- # 获取百度前十页
- top10Urls = []
- #=> get_current_page得到本页网页,得到a标签对象
- for link in browser.get_current_page().select('a'):
- if link.text in tuple(map(str, range(2, 11))):
- #=> link.attrs['href] a标签中的属性得到值
- top10Urls.append(r'http://www.baidu.com'+ link.attrs['href'])
- # 与微信公众号里的文章标题进行比对,如果非常相似就返回True
- def check(text):
- for article in articles:
- # 使用切片,防止网站转发公众号文章时标题不完整
- if article[2:-2].lower() in text.lower():
- return True
- return False
- # 只输出密切相关的链接
- def getLinks():
- for link in browser.get_current_page().select('a'):
- text = link.text
- if 'Python小屋' in text or '董付国' in text or check(text):
- print(link.text, '-->', link.attrs['href'])
- # 输出第一页
- getLinks()
- # 处理后面的9页
- for url in top10Urls:
- browser.open(url)
- getLinks()
参考内容:Python 3.6模拟输入并爬取百度前10页密切相关链接

【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接的更多相关文章
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- Python 基础语法+简单地爬取百度贴吧内容
Python笔记 1.Python3和Pycharm2018的安装 2.Python3基础语法 2.1.1.数据类型 2.1.1.1.数据类型:数字(整数和浮点数) 整数:int类型 浮点数:floa ...
- Python爬虫:通过关键字爬取百度图片
使用工具:Python2.7 点我下载 scrapy框架 sublime text3 一.搭建python(Windows版本) 1.安装python2.7 ---然后在cmd当中输入python,界 ...
- 【python爬虫和正则表达式】爬取表格中的的二级链接
开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...
- python简单爬虫 用beautifulsoup爬取百度百科词条
目标:爬取“湖南大学”百科词条并处理数据 需要获取的数据: 源代码: <div class="basic-info cmn-clearfix"> <dl clas ...
- Python爬虫之简单的爬取百度贴吧数据
首先要使用的第类库有 urllib下的request 以及urllib下的parse 以及 time包 random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url: ...
- python制作的翻译器基于爬取百度翻译【笔记思路】
#!/usr/bin/python # -*- coding: cp936 -*- ################################################### #基于百度翻 ...
- Python每日一练(3):爬取百度贴吧图片
import requests,re #先把要访问URL和头部准备好 url = 'http://tieba.baidu.com/p/2166231880' head = { 'Accept': '* ...
随机推荐
- thread常用方法
- sys模块 进度条百分比
用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) ...
- sql编写注意
DROP TABLE IF EXISTS `imooc_pro`; CREATE TABLE `imooc_pro`( `id` int unsigned auto_increment key, `p ...
- 7-n!末尾有几个0
如何确定一个N!末尾有多少个零 转载 2015年08月30日 15:02:49 622 题目:1*2*3*……*100 求结果末尾有多少个零 分析:一般类似的题目都会蕴含某种规律或简便方法的,阶乘末尾 ...
- Luogu 3530 [POI2012]FES-Festival
我是真的不会写差分约束啊呜呜呜…… BZOJ 2788被权限了. 首先对于第一个限制$x + 1 = y$,可以转化成$x + 1 \leq y \leq x + 1$, 所以连一条$(y, x, - ...
- Luogu 2939 [USACO09FEB]改造路Revamping Trails && Luogu 4568 [JLOI2011]飞行路线
双倍经验 写这两题之前被大佬剧透了呜呜呜. 分层图+最短路. 因为有$k$次机会能够把路径的费用变为$0$,我们可以建$k + 1$层图,对于每一层图我们把原来的边权和双向边连到上面去,而对于层与层之 ...
- Entity Framework Tutorial Basics(11):Code First
Code First development with Entity Framework: Entity Framework supports three different development ...
- leetCode编程题
已知链表1->2->3->4,先需要删除3这个节点,请完成函数.注意,这里只给定要删除的节点3,并不知道3之前的节点是哪个,以及整个链表是什么节点. void delete(List ...
- 非阻塞socket与epoll
阻塞socket. –阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. –对于文件操作read,fread函数调用会将线程阻塞. –对于socket,accept与re ...
- const 在C++中的区别
一.Const作用 如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有 ...