【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

问题描述

通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接。

mechanicalsoup模块

MechanicalSoup无需图形界面环境下的浏览器开源项目,是一个基于极其流行而异常多能的 HTML 解析库 Beautiful Soup 建立的爬虫库。如果你的爬虫需要相当的简单,但是又要求检查一些选择框或者输入一些文字,而你又不想为这个任务单独写一个爬虫,那么这会是一个值得考虑的选择。

安装

pip install MechanicalSoup

需要BeautifulSoup和requests库的依赖。

解析百度网页源码

分析百度网页源代码,找到用来接收搜索关键字的表单和输入框。

搜索用的表单

程序实现

map函数

map函数第一个参数为函数,但不需要'()',第二个参数是迭代器对象,作用是对迭代器对象遍历使用第一个函数。

  1. #!/usr/bin/env python  

  2. #-*- coding:utf-8 -*-  

  3. """  

  4. @author:BanShaohuan 

  5. @file: Python 3.6模拟输入并爬取百度前10页密切相关链接 

  6. @time: 2018/06/09 

  7. @contact: banshaohuan@163.com 

  8. @software: PyCharm  

  9. """  

  10. import mechanicalsoup 


  11. # python小屋文章清单 

  12. with open('list.txt', encoding="utf8") as fp: 

  13. articles = fp.readlines() 

  14. #=> 使用map函数,去掉从文本当中读取时的字符,并放入元组中 

  15. articles = tuple(map(str.strip, articles)) 


  16. # 模拟打开指定网址,模拟输入并提交输入的关键字 

  17. browser = mechanicalsoup.StatefulBrowser() #=> 新建一个对象 

  18. browser.open(r'http://www.baidu.com')#=> 模拟打开百度 

  19. browser.select_form("#form")#=> 根据class指定一个表单 

  20. browser['wd'] = 'Python小屋'#=> 根据表单的id指定表单中输入的内容 

  21. browser.submit_selected()#=> 提交,模拟搜索 


  22. # 获取百度前十页 

  23. top10Urls = [] 

  24. #=> get_current_page得到本页网页,得到a标签对象 

  25. for link in browser.get_current_page().select('a'): 

  26. if link.text in tuple(map(str, range(2, 11))): 

  27. #=> link.attrs['href] a标签中的属性得到值 

  28. top10Urls.append(r'http://www.baidu.com'+ link.attrs['href']) 


  29. # 与微信公众号里的文章标题进行比对,如果非常相似就返回True 

  30. def check(text): 

  31. for article in articles: 

  32. # 使用切片,防止网站转发公众号文章时标题不完整 

  33. if article[2:-2].lower() in text.lower(): 

  34. return True 

  35. return False 


  36. # 只输出密切相关的链接 

  37. def getLinks(): 

  38. for link in browser.get_current_page().select('a'): 

  39. text = link.text 

  40. if 'Python小屋' in text or '董付国' in text or check(text): 

  41. print(link.text, '-->', link.attrs['href']) 


  42. # 输出第一页 

  43. getLinks() 

  44. # 处理后面的9页 

  45. for url in top10Urls: 

  46. browser.open(url) 

  47. getLinks() 

参考内容:Python 3.6模拟输入并爬取百度前10页密切相关链接

【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接的更多相关文章

  1. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  2. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  3. Python 基础语法+简单地爬取百度贴吧内容

    Python笔记 1.Python3和Pycharm2018的安装 2.Python3基础语法 2.1.1.数据类型 2.1.1.1.数据类型:数字(整数和浮点数) 整数:int类型 浮点数:floa ...

  4. Python爬虫:通过关键字爬取百度图片

    使用工具:Python2.7 点我下载 scrapy框架 sublime text3 一.搭建python(Windows版本) 1.安装python2.7 ---然后在cmd当中输入python,界 ...

  5. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  6. python简单爬虫 用beautifulsoup爬取百度百科词条

    目标:爬取“湖南大学”百科词条并处理数据 需要获取的数据: 源代码: <div class="basic-info cmn-clearfix"> <dl clas ...

  7. Python爬虫之简单的爬取百度贴吧数据

    首先要使用的第类库有 urllib下的request  以及urllib下的parse  以及 time包  random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url: ...

  8. python制作的翻译器基于爬取百度翻译【笔记思路】

    #!/usr/bin/python # -*- coding: cp936 -*- ################################################### #基于百度翻 ...

  9. Python每日一练(3):爬取百度贴吧图片

    import requests,re #先把要访问URL和头部准备好 url = 'http://tieba.baidu.com/p/2166231880' head = { 'Accept': '* ...

随机推荐

  1. 浅谈Android四大组建之一Service---Service的创建

    Service是安卓四大组件之一,个人觉得Service的使用还是比较简单的额,可以理解为看不见的Activity,因为Service的使用和Activity十分接近.启动啊,生命周期等,都十分简单. ...

  2. linux&nbsp;dev/dsp&nbsp;声卡学习笔记

    原文地址:dev/dsp 声卡学习笔记">linux dev/dsp 声卡学习笔记作者:ziyou飞翔       无论是从声卡读取数据,或是向声卡写入数据,事实上都具有特定的格式(f ...

  3. python笔记--3--函数、生成器、装饰器、函数嵌套定义、函数柯里化

    函数 函数定义语法: def 函数名([参数列表]): '''注释''' 函数体 函数形参不需要声明其类型,也不需要指定函数返回值类型 即使该函数不需要接收任何参数,也必须保留一对空的圆括号 括号后面 ...

  4. js 中的apply

    之一------(函数的劫持与对象的复制)关于对象的继承,一般的做法是用复制法: Object.extend 见protpotype.js 的实现方法: Object.extend = functio ...

  5. css背景图片位置:background的position(转)

    css背景图片位置:background的position   position的两个参数:水平方向的位置,垂直方向的位置----------该位置是指背景图片相对于前景对象的 1.backgroun ...

  6. C++面向对象类的实例题目二

    题目描述: 编写一个程序,设计一个产品类Product,其定义如下: class Product { public: Product(char *n,int p,int q); //构造函数 ~Pro ...

  7. iOS symbolicatecrash工具crash日志分析

    若一个App没有加入Crashlytics或者Buggly这些崩溃日志监控,那么我们在App崩溃的时候如何获取崩溃信息呢? 此时我们可以通过symbolicatecrash工具对手机日志来进行分析定位 ...

  8. 查询sql语句的执行时间

    我们开启执行计划来看sql语句的执行效率,看下索引是否使用等 但是执行计划没有告诉我们执行时间,刚刚看了一个代码,可以自己计算执行时间的 Declare @d Datetime      Set @d ...

  9. 人工智能热门图书(深度学习、TensorFlow)免费送!

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 这个双十一,人工智能市场火爆,从智能音箱到智能分拣机器人,人工智能已逐渐渗透到我们的生活的方方面面.网易云社区联合博文视点为大家带来人工智能热门图书 ...

  10. Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0.jar的问题

    今天往STS工具中导入一个maven项目,导入后发现pom.xml文件的<dependency>处报错:Missing artifact com.oracle:ojdbc14:jar:10 ...