使用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. android完美的退出方法

    http://blog.csdn.net/get123/article/details/9001214

  2. Gym - 101617D_Jumping Haybales(BFS)

    Sample Input 4 2 .### #... .#.. #.#. 3 1 .#. .#. .#. Sample Output 4 -1 题意:给一个n*n的图,每次最多能跳k个格子,只能向南( ...

  3. Java练习 SDUT-1200_汉诺塔

    汉诺塔 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 汉诺塔(又称河内塔)问题是印度的一个古老的传说. 开天辟地的神勃 ...

  4. Alternating Direction Method of Multipliers -- ADMM

    前言: Alternating Direction Method of Multipliers(ADMM)算法并不是一个很新的算法,他只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提 ...

  5. Linux下安装MySQL-python

    因为安装过程不断出现错误,备份.系统:linux ubuntupython版本:Python 2.7.3mysql版本:mysql  Ver 14.14 Distrib 5.5.35, for deb ...

  6. Android中后台线程如何与UI线程交互

    我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须 ...

  7. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. xml schema介绍

    https://www.runoob.com/schema/schema-tutorial.html

  9. day5_python之环境变量设置

    1.设置环境变量 import os,sys print(os.path.abspath(__file__)) #当前py文件的绝对路径 print(os.path.dirname(os.path.a ...

  10. VS Code导入已存在的Vue.js工程

    打开vscode------->文件--------->打开文件夹--------->选择工程文件夹-------->确定 查看---->终端或者使用"Ctrl ...