{Day30} 网路爬虫

前言

现在要进入网路爬虫的自学纪录了!!!

Such a long way

网路爬虫可以说是非常实用的功能

这篇文章会学习到

  1. 网路爬虫的功用
  2. HTML简介
  3. 使用Reruests函式库

今天的自学资源是来自Coursera上台大资管系孔令杰老师开设的:

用 Python 做商管程序设计(三)(Programming for Business Computing in Python (3))

Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera

这堂课的内容是在第5周的C05网路爬虫

老师上课的语速非常刚好

内容也很容易上手

非常推荐对python有兴趣的人可以上去coursera上看老师的教学影片

对学习python的人来说会是很好上手并且内容丰富的一堂课

网路爬虫的功用

我们常见的网页通常是长这样

或是这样

爬虫就是去网页上把资讯爬取下来

网页上的这些资讯都是利用原始码包装过後所呈现出来的

以chrome为例

按右键就可以选取『检视原始码』,像是下图红色框框

网页的原始码如下图所示

这些网页的商品资讯经常会有变动

爬虫可以定时撷取并且更新资料

像是商品种类或是价格

爬虫也可以帮我们进行汇整与统计

像是要比较竞争者的商品价格

就可以利用爬虫这个功能

网路爬虫的原理

最基本的爬虫程序:

  • 抓取该网页的原始码(通常是基於HTML规格编写的内容)
  • 了解该网页原始码的结构
  • 了解想撷取的资讯储存在哪里
  • 解析该网页原始码,取得想要的资讯

进阶的网路爬虫

  • 针对多个网页进行爬取

  • 传递资讯给网页(例如登入资讯)

  • 操作网页(例如点选下一页)

    像是要抢车票、演唱会的票,网页通常需要登入、输入资讯

一般的情况是需要我们手动输入

但是有了爬虫之後就可以预先设定好要输入的内容、想要的座位

在需要和时间竞赛的情况下

电脑会跑得比人快

使用爬虫会替我们省下不少麻烦

HTML简介

HTML是一种程序语言

准确来说是一种标记语言

利用不同的标记产生美观且具有互动性的网页

虽然现在有不少网页都不是用纯HTML写的,但是大多数都仍然遵循HTML架构

绝大多数的浏览器取得HTML档案之後

会解析其中的标签,并将解析後的网页呈现出来

接下来来看简单的网页原始码

HTML的排列大致上是树状的

有开头跟结尾

上述范例有分成两部分:

  1. Head:网页标签页上显示的文字
  2. Body:页面上要出现什麽

现在来看看Body里的文字分别有何意思

  1. <body bgcolor........>:这行代表的是网页的背景要选用什麽颜色
  2. <h3> Hi!!!</h3>:表示的是header等级三,里面包的是要用的文字
  3. <ul> ......<ul>: 则是清单的意思
  4. <li> .....</li>: 这里的li是list item的意思
  5. buttom :则会产生按钮

可以看出HTML语法有一定的排列规则

爬虫主要是看我们想要的资讯储存在某个标签里面

右上角红色框框是在网页上显示出来的样子

而下方的蓝色框框则是他的原始码

使用Reruests函式库

Python有非常多跟爬虫相关的library

这里会使用到的是

  • requests: 取得网页HTML原始码
  • beautifulsoup: 解析HTML

现在来练习取得网页的HTML原始码

假如现在想要取得博客来上跟python有关的书籍

首先使用requests.get()取得网页HTML的原始码

import requests 

url = "https://search.books.com.tw/search/query/cat/all/sort/9/v/0/page/1/spell/3/ms2/ms2_1/key/python"

r = requests.get(url) #r是requests.get()回传的物件
print(r.ststus_code) #200代表ok

if r.status_code == requests.codes.ok:
	print("OK!")

r是requests.get()回传的物件

r.status_code 纪录这个HTTP request的结果代码

requests.codes.ok就是200

若是想查看原始码,可以使用r.text

print(r.text)

可以看到输出的是复杂的原始码

代表已经把网页的资讯撷取下来了!

接下来就可以使用beautifulsoup函式库来协助我们解读


<<:  Day27. 虽然今年是2021,但我们要做2048(1)

>>:  Day 27 PostgreSQL 慢查询提速 50+ 倍?

Day 0x1B - odoo addons 永丰金流开发(Part 2 - sinopac sdk... maybe)

*** 模组资料夹 payment_sinopac 以 "/" 来代表此资料夹 ...

Day05_CAP定理

今天讲解的是 CAP 定理 DAY05_CAP定理 ...

Day 19 - C strings 字串,我好想吃串烧

Outline Characters C strings C string processing f...

[Day 18] 实作 - 介面篇2

首先看一下原生的技能介面是怎麽生成的 游戏介面分成场景(Scene)跟视窗(Window) 透过在S...

【React Hook 01】概述

Hook 是 React 16.8 中增加的新功能, 补足了早期 Function Componen...