使用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'}

The first day of Crawler learning的更多相关文章

  1. The sixth day of Crawler learning

    爬取我爱竞赛网的大量数据 首先获取每一种比赛信息的分类链接 def get_type_url(url):    web_data = requests.get(web_url)    soup = B ...

  2. The fifth day of Crawler learning

    使用mongoDB 下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl ...

  3. The fourth day of Crawler learning

    爬取58同城 from bs4 import BeautifulSoupimport requestsurl = "https://qd.58.com/diannao/35200617992 ...

  4. The third day of Crawler learning

    连续爬取多页数据 分析每一页url的关联找出联系 例如虎扑 第一页:https://voice.hupu.com/nba/1 第二页:https://voice.hupu.com/nba/2 第三页: ...

  5. The second day of Crawler learning

    用BeatuifulSoup和Requests爬取猫途鹰网 服务器与本地的交换机制 我们每次浏览网页都是再向网页所在的服务器发送一个Request,然后服务器接受到Request后返回Response ...

  6. Machine and Deep Learning with Python

    Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...

  7. Node.js Learning Paths

    Node.js Learning Paths Node.js in Action Node.js Expert situations / scenario Restful API OAuth 2.0 ...

  8. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

随机推荐

  1. 1<<33这种写法是错的!!!

    1<<33不能这么写,1默认int类型,应该改为(long long)1<<33

  2. oralce分析函数如何工作

    语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> &l ...

  3. Knative 初体验:Eventing Hello World

    作者 | 阿里云智能事业群高级开发工程师 元毅 基于事件驱动是Serveless的核心功能之一,通过事件驱动服务,满足了用户按需付费(Pay-as-you-go)的需求.在之前的文章中我们介绍过 Kn ...

  4. jQuery Css类

    通过 jQuery,可以很容易地对 CSS 元素进行操作 jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法.我们将学习下面这些: addClass() - 向被选元素添加一个 ...

  5. D-query SPOJ - DQUERY 主席树查询区间内不同数出现的次数

    我们不以权值建立主席树,而是区间端点作为值建立线段树,一个个插入a[i],我们发现这个数之前是存在的,就需要在上个版本的主席树上减去原来的位置,并加上现在的位置,这样我们在i版本的主席树,维护1-r中 ...

  6. php统计近一周和近30天的用户数据

    https://blog.csdn.net/shenpengchao/article/details/59073589 先上一张效果图 这边用的是echarts插件http://echarts.bai ...

  7. sublime text 3创建新文件插件-AdvanceNewFile

    这里要记录sublime text 3 在创建新文件时安装的插件–AdvanceNewFile ST本来自带的创建新文件的快捷键是ctrl+n.但是用户需要保存时才可修改名称以及文件路径.但是安装完A ...

  8. Ext.FormPanel-----FieldSet的用法

    Ext.form.FieldSet的常用配置项: 1.checkboxToggle : Mixed True表示在lengend标签之前fieldset的范围内渲染一个checkbox,或者送入一个D ...

  9. tensorflow入门——3解决问题——4让我们开始吧

    深度学习适合解决海量数据和复杂问题 在机器学习中,语音识别,图像识别,语意识别用的是不同的技术,从事相关工作的人合作几乎不可能. 深度学习改变了这一切. 80年代计算机很慢,数据集很小,因此深度学习没 ...

  10. Codeforces Round #174 (Div. 1 + Div. 2)

    A. Cows and Primitive Roots 暴力. B. Cows and Poker Game 模拟. C. Cows and Sequence 线段树维护. D. Cow Progra ...