【学习笔记】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': '* ...
随机推荐
- LAMP 3.0 mysql配置讲解
mysql 安装好后,我们是从安装包的 support-files 里面复制过来一个模板配置文件,默认 mysql 配置文件是在/etc/my.cnf 下,其实这个路径或者文件名字我们是可以修改的,在 ...
- Codeforces 914C Travelling Salesman and Special Numbers (数位DP)
题意:题目中定义了一种运算,把数字x变成数字x的二进制位数.问小于n的恰好k次运算可以变成1的数的个数(题目中的n是二进制数,n最大到2^1000) 思路:容易发现,无论多么大的数,只要进行了一次运算 ...
- POJ 3714 分治/求平面最近点对
第一次见这种问题直接懵圈...没想到分治法这么强大,借鉴了lyd的代码: 代码如下 #include<cstdio> #include<algorithm> #include& ...
- ROS探索总结(六)——使用smartcar进行仿真
转自:https://www.ncnynl.com/archives/201609/843.html 总结: 一.机器人描述文件三个: 机器人主体body文件: gazebo属性文件: 主文件 sma ...
- Java线程池拒绝策略
Java线程池拒绝策略 相关资料: 线程池的RejectedExecutionHandler(拒绝策略):http://blog.csdn.net/jgteng/article/details/544 ...
- static、静态变量、静态方法
1 静态:static 1.1 用法 是一个修饰符:用于修饰成员(成员变量和成员函数) 1.2 好处 当成员变量被静态static修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用 ...
- ubuntu16配置Mask-RCNN
一.安装Anaconda3 1.下载 下载地址:https://www.continuum.io/downloads 2.安装 在文件目录下执行:bash Anaconda3-4.2.0-Linux- ...
- OpenCV Mat数据类型指针ptr的使用
OpenCV Mat数据类型指针ptr的使用 cv::Mat image = cv::Mat(400, 600, CV_8UC1); //宽400,长600 uchar * data00 = imag ...
- c++ 类中模版成员函数
C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 templa ...
- Bulma 源码解析之 .columns 类
{说明} 这一部分的源码内容被我简化了,另外我还额外添加了一个辅助类 is-grow. .columns // 修饰类 &.is-centered justify-content: cente ...