GitHub上3k+star的python爬虫库你了解吗?详解MechanicalSoup爬虫库

osc_4qu6doqx 2021-01-23 12:40:20
Python pip github red mechanicalsoup


提起python爬虫,大家想起的是requests还是bf4或者是scrapy?但是有一款爬虫库在GitHub上已经拿了3k+的小星星,那就是MechanicalSoup

图片

本文将从以下几个维度讲解这个爬虫包:


  • MechanicalSoup有什么特点

  • MechanicalSoup适合在哪些场景用

  • 代码详解MechanicalSoup的工作流程


MechanicalSoup介绍

MechanicalSoup不仅仅像一般的爬虫包一样可以从网站上爬取数据,而且可以通过简单的命令来自动化实现与网站交互的python库。它的底层使用的是BeautifulSoup(也就是bs4)和requests库,因此如果各位读者熟悉以上两个库,那么使用起来会更加的顺手。

因此,如果在开发过程中需要不断的与网站进行交互,比如点击按钮或者是填写表单,那么MechanicalSoup将会派上很大的用场。接下来,让我们直接用代码展示这个神奇的爬虫包是怎样工作的。


MechanicalSoup安装

#直接安装pip install mechanicalsoup#从GitHub上下载并安装开发版本pip install git+https://github.com/MechanicalSoup/MechanicalSoup

代码详解MechanicalSoup

我们将分两个案例详解是怎样通过MechanicalSoup实现网页内容获取和网站交互,首先看第一个爬取虎扑热帖

我们先打开虎扑社区首页,可以看到有几个帖子是红色标题,现在想把这几个帖子的标题爬下来并保存。首先创建一个浏览器实例:

import mechanicalsoup
browser
= mechanicalsoup.StatefulBrowser()

现在我么在浏览器的实例中打开虎扑bbs的网站,提示200表示OK访问成功

browser.open('https://bbs.hupu.com/')<Response [200]>
我们的浏览器实例现在位于虎扑bbs主页。现在,我们需要获取该页面上存在的文章列表。这部分有点棘手,因为我们需要唯一地标识包含文章列表的标签的属性。但是,借助Chrome之类的浏览器可以轻松完成此操作:

我们通过检查元素发现发现它位于ul标签内,而这个ul标签在一个clss为list的div里面,然后进一步检查发现热帖的clss="red",这样我们就可以利用类似bs4的方法找到我们需要的文章标题。

result = browser.get_current_page().find('div', class_="list")
result
= list(result.find('ul'))
bbs_list
=[]for i in range(len(result)):
   
if result[i] != '\n':
       bbs_list
.append(result[i])
bbs_top
= []for i in bbs_list:
   bbs_top
.append(i.find('span',class_="red"))

bbs_top

看下结果,已经成功将带有标签的标题保存,接下来只要用.text就可以取出标题。

[<span class="red">唱的让人心碎,珍妮弗-哈德森赛前献唱,For Kobe and Gigi</span>,
<span class="red">[字幕]魔术师致敬科比斯特恩:斯特恩是我救命恩人,科比这样的球员永远不会再有</span>,
<span class="red">[流言板]Mambas Forever!如果1月27日能够重来,也许......</span>,
<span class="red">今天比赛不管谁赢,mamba never out</span>,
None,
None,
None,
None,
None,
None





]


再看下一个例子, mechanicalsoup是怎样与网站进行交互。这次我们选择一个更简单的例子,使用mechanicalsoup来进行百度搜索

和之前的操作一样,我们先在浏览器创建实例并打开百度首页。

import mechanicalsoup
browser
= mechanicalsoup.StatefulBrowser()

browser.open('https://www.baidu.com/')

<Response [200]>

看到响应成功之后,我们再来提取一下需要提交的表单

browser.select_form()

browser.get_current_form().print_summary()

<input name="bdorz_come" type="hidden" value="1"/>

<input name="ie" type="hidden" value="utf-8"/>

<input name="f" type="hidden" value="8"/>

<input name="rsv_bp" type="hidden" value="1"/>

<input name="rsv_idx" type="hidden" value="1"/>

<input name="tn" type="hidden" value="baidu"/>

<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>

<input autofocus="" class="bg s_btn" id="su" type="submit" value="百度一下"/>

可以看到需要填充的表单就是倒数第二行的内容,于是我们可以按照以下方法填充

browser["wd"] = '早起python'

然后可以用下面的命令打开一个与原始网页内容相同的本地网页,并在表格中填充我们提供的值。

browser.launch_browser()

图片

可以看到,搜索框内已经填好了需要搜索的内容,接下来只需要让我们创建出来的浏览器帮我们点击一下就行,执行:

browser.submit_selected()<Response [200]>

返回200代表相应成功,一次模拟点击就实现了。接下来通过browser.get_current_page()就可以查看到返回的页面内容了!


结束语


上面两个例子虽然简单,但是这就是mechanicalsoup的基本工作套路:先创建一个浏览器实例,然后通过这个浏览器去帮你执行你想要的相关操作,甚至还可以在提交之前打开一个本地的可视化页面预览你即将提交的表单内容!还等什么,抓紧去试试吧!


版权声明
本文为[osc_4qu6doqx]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4393870/blog/4921496

  1. Mandatory conversion of Python data type
  2. Django reported an error: 'key' ID 'not found in' xxx '. Choices are: xxx'
  3. Python 400 sets of large video, starting from the right direction to learn, a complete set to you
  4. 只需十四步:从零开始掌握Python机器学习(附资源)
  5. Just 14 steps: Master Python machine learning from scratch (resources attached)
  6. Python|文件读写
  7. 安利一个Python界神奇得网站
  8. Python | file reading and writing
  9. Amway is a marvelous website in Python world
  10. 第二热门语言:从入门到精通,Python数据科学简洁教程
  11. The second popular language: from introduction to mastery, python data science concise tutorial
  12. 以我的亲身经历,聊聊学python的流程,同时推荐学python的书
  13. With my own experience, I'd like to talk about the process of learning Python and recommend books for learning python
  14. 以我的亲身经历,聊聊学python的流程,同时推荐学python的书
  15. With my own experience, I'd like to talk about the process of learning Python and recommend books for learning python
  16. Django url 路由匹配过程
  17. Django URL routing matching process
  18. 强者一出,谁与争锋?与Python相比,C++的运行速度究竟有多快?
  19. Who will fight against the strong? How fast is C + + running compared with Python?
  20. python 学习体会
  21. Experience of learning Python
  22. python7、8章
  23. Chapter 7 and 8 of Python
  24. python bool和str转换
  25. python——循环(for循环、while循环)及练习
  26. python变量和常量命名、注释规范
  27. python自定义异常捕获异常处理异常
  28. python 类型转换与数值操作
  29. python 元组(tuple)和列表(list)区别
  30. 解决python tkinter 与 sleep 延迟问题
  31. python字符串截取操作
  32. Python bool and STR conversion
  33. Python -- loop (for loop, while loop) and Practice
  34. Specification for naming and annotating variables and constants in Python
  35. Python custom exception capture exception handling exception
  36. Python type conversion and numerical operation
  37. The difference between tuple and list in Python
  38. Solve the delay problem of Python Tkinter and sleep
  39. Python string interception operation
  40. Python 100天速成中文教程,GitHub标星7700
  41. Python 100 day quick Chinese course, GitHub standard star 7700
  42. 以我的親身經歷,聊聊學python的流程,同時推薦學python的書
  43. With my own experience, I'd like to talk about the process of learning Python and recommend books for learning python
  44. python爬虫获取起点中文网人气排行Top100(快速入门,新手必备!)
  45. Python crawler to get the starting point of Chinese network popularity ranking Top100 (quick start, novice necessary!)
  46. 【Python常用包】itertools
  47. Itertools
  48. (国内首发)最新python初学者上手练习
  49. (国内首发)最新python初学者上手练习
  50. (first in China) the latest practice for beginners of Python
  51. (first in China) the latest practice for beginners of Python
  52. (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)
  53. (data science learning notes 104) Python + dash rapid web application development -- callback interaction (Part 1)
  54. (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)
  55. (data science learning notes 104) Python + dash rapid web application development -- callback interaction (Part 1)
  56. (資料科學學習手札104)Python+Dash快速web應用開發——回撥互動篇(上)
  57. (materials science learning notes 104) Python + dash rapid web application development -- callback interaction (Part 1)
  58. Python OpenCV 图片高斯模糊
  59. Python OpenCV image Gaussian blur
  60. Stargan V2: converse image synthesis for multiple domains reading notes and Python code analysis