使用BeautifulSoup解析网页

Soup = BeautifulSoup(urlopen(html),'lxml')

Soup为汤,html为食材,lxml为菜谱

from bs4 import BeautifulSoup
from urllib.request import urlopen
Soup = BeautifulSoup(urlopen("http://moumangtai.com/"), "lxml")

描述要爬取的东西在哪

选择要爬取的页面进行检查或按F12可以调出网页的源代码,对要爬取的部分可以选择copy,以当前博客首页大标题为例

copy select:body > header > div > div > div > div > h1

copy Xpath:/html/body/header/div/div/div/div/h1

两者区别在与select多了css样式,但是我们BeautifulSoup只认识copy select ,而Xpath则用于其他库

我的博客为例,来获取大标题和副标题的信息

title = Soup.select("body > header > div > div > div > div > h1")
subtitle = Soup.select("body > header > div > div > div > div > span")
print(title)
print(subtitle)

结果为:

[<h1>QiongDi.W Blog</h1>]
[<span class="subheading">我干了什么 究竟拿了时间换了什么</span>]

再例如每篇文章的标题

copy select:body > div > div > div.col-lg-8.col-lg-offset-1.col-md-8.col-md-offset-1.col-sm-12.col-xs-12.postlist-container > div:nth-child(1) > a > h2

去掉div:nth-child(1)中的筛选后则能爬取相同一类的数据

[<h2 class="post-title">
一日算法
</h2>, <h2 class="post-title">
公共地点人流量计算的云监管平台
</h2>, <h2 class="post-title">
Hello MyBlog
</h2>]

从标签中获得你要的信息

通过调用get_text()即可获取标签内的文本,对于一类数据可以通过for循环获取

for stitle in sontitle:
   print(stitle.get_text())

如果为图片则获取图片的src,即get("src")

对获取到的信息进行整合

假设获取每一篇文章的所有信息

titles = Soup.select("body > div > div > div.col-lg-8.col-lg-offset-1.col-md-8.col-md-offset-1.col-sm-12.col-xs-12.postlist-container > div > a > h2")
subtitles = Soup.select("body > div > div > div.col-lg-8.col-lg-offset-1.col-md-8.col-md-offset-1.col-sm-12.col-xs-12.postlist-container > div > a > h3")
# contents = Soup.select("body > div > div > div.col-lg-8.col-lg-offset-1.col-md-8.col-md-offset-1.col-sm-12.col-xs-12.postlist-container > div > a > div")
messages = Soup.select("body > div > div > div.col-lg-8.col-lg-offset-1.col-md-8.col-md-offset-1.col-sm-12.col-xs-12.postlist-container > div > p")
info = []
for title, subtitle, message in zip(titles, subtitles, messages):
   data = {
       "title": title.get_text().strip(),
       "subtitle": subtitle.get_text().strip(),
       # "content": content.get_text().strip(),
       "message": message.get_text().strip()
  }
   print(data)
   info.append(data)

得到结果:

{'title': '一日算法', 'subtitle': '"Daily algorithm"', 'message': 'Posted by 王琼弟 on April 18, 2019'}
{'title': '公共地点人流量计算的云监管平台', 'subtitle': '"Cloud Monitoring Platform for Human Flow Computing in Public Places"', 'message': 'Posted by 王琼弟 on April 18, 2019'}
{'title': 'Hello MyBlog', 'subtitle': '"Hello World, Hello Blog"', 'message': 'Posted by 王琼弟 on April 17, 2019'}

当一个父节点下有多个子节点而我们需要获取所有的子节点的时候,我们应先爬取他的父节点,然后利用list{父节点.stripped_strings}实现多对一的逻辑获得一个子节点的列表 ps:stripped_strings可以理解为高级的text,可以去除掉所有多余的部分,返回干净的文本信息

筛选信息

for i in list:
   if i["title"]=="Hello MyBlog":
       print(i)
{'title': 'Hello MyBlog', 'subtitle': '"Hello World, Hello Blog"', 'message': 'Posted by 王琼弟 on April 17, 2019'}

最新文章

  1. Redis命令拾遗四(集合类型)—包含简单搜索筛选商品设计实例。
  2. 项目部署到tomcat Root中后导致 WebApplicationContext 初始化两次的解决方法
  3. js中location.href的用法
  4. openstack通过salt-cloud创建虚拟机
  5. 速度之王 — LZ4压缩算法(三)
  6. 响应式架构:消息模式Actor实现与Scala、Akka应用集成
  7. GridControl的列显示成图片+文字,并且不同的文字对应不同的图片
  8. javascript高级知识分析——函数访问
  9. C指针陷阱
  10. C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
  11. java web服务器tomcat介绍【转载】
  12. SVG交互动画制作
  13. jsp页面从标签属性中获取值
  14. 多模块后带来的问题解决方法 - OSGI原形(.NET)
  15. [BZOJ2863]愤怒的元首
  16. SVN windows内修改日志内容(错误解决)
  17. 初识MapReduce
  18. ElasticSearch 2 (25) - 语言处理系列之同义词
  19. Drools解决积分问题
  20. Buns---cf 106C(多重背包)

热门文章

  1. javascript导图 标签: javascript 2015-12-06 16:37 721人阅读 评论(24)
  2. HDU-1260_Tickets
  3. Codesign error: Certificate identity appearing twice
  4. 《C语言深度解剖》学习笔记之指针和数组
  5. 洛谷P1049 装箱问题
  6. H3C ARP
  7. 【CSS3】纯CSS3制作页面切换效果
  8. Android 设置TextView字体颜色
  9. C# Dapper 基本使用 增删改查事务
  10. javascript 变量的提升