注:本文仅适用于爬虫初级入门者,并不涉及太多技术本质

感谢您阅读此文。最近放假在家,闲时无聊,开始入门了python爬虫,可以完成一些基本的数据爬取(对于一些反爬取例如JS渲染,接口加密等页面仍然处于学习之中),本文就是简单总结最近已熟练掌握的爬取静态网页的方法。

若是从未接触过相关知识的朋友,在开始之前,需至少掌握python入门知识,详见廖雪峰的官方网站,另外若要深入探究爬虫的本质以及希望更好地爬取所需数据的朋友,那么就需要熟悉web前端知识(HTML,JS,CSS,jQ,Ajax等),在此文中并不会过深涉及,故不加阐述。

接下来简单介绍一下BeautifulSoup库和requests库(另外还需安装lxml库):

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下: Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档本身就没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。详见BeautifulSoup4.2.0官方文档。

Requests 是用Python语言编写,基于 urllib 的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,可以满足 HTTP 测试需求。可参照Python第三方库request详解这篇文章。

接下来我们就开始从爬取网易云课堂上计算机专业所需课程以简单示范:

1.首先,导入我们所需的库:

from bs4 import BeautifulSoup
import requests

2.接着我们用url确定我们的目标网址:

url='http://study.163.com/curricula/cs.htm'

URL是统一资源定位符,基本URL包含协议、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”

而我们加载网页的过程基本就是客户端向服务器以某一方式发送request,而服务器处理后,会给我们response

而请求方式有多种:get,post,head,put,options等等,而一般常用的只有get和post两种,对于一般的网页,我们通常只使用get方式即可。get和post的区别-知乎
3.接下来,我们开始利用requests.get()来获取网页并利用bs4解析网页:

response=requests.get(url)
soup=BeautifulSoup(response.text,'lxml')

soup=BeautifulSoup(html #目标网址文本内容# ,’lxml’#解析器# )

4.此时,我们就需要人工到目标网站上寻找自己想要的数据的位置:

基本步骤:进入网页后,打开开发者工具(F12),or右键点击网页检查,or直接找到需要的内容右键检查

我们希望把计算机专业在大学本科阶段的所有课程全部爬取下来,那么我们就要找到所需数据的定位位置,复制它的定位路径无论是类名还是selector路径等都可以,关键是要满足我们可以通过它来准确找到所需要的数据。

而在获取同一类数据时,我们要注意观察他们之间的标签等有没有共同点,分析出后即可利用select()统一筛选放入list。

而常用的路径描述有两种:CSS Selector和XPATH,而soup.select()不支持XPATH。select方法详解。

经过分析,我们发现所有课程有两种不同的特征路径,利用这两种特征路径找到路径,我们就可以筛选出所需数据了:

data0=soup.select('span.f-thide.cataName.f-ib')
data1=soup.select('#j-package > div > div > div > a')

5.最后我们需要把数据打印出来:

for x in data0:print(x.get_text())
for y in data1:print(y.get_text())

此处由于我们仅仅筛选出单一数据,仅做范例。

若是多个有关联的数据,可以利用正则匹配等方法处理数据,整理到一个字典中再打印出来或者保存到文件以及数据库等等。

由于笔者能力有限,所以对很多地方实在不敢妄加赘述,如有不足之处,望及时指出

在此简单总结一下本文:
静态网页爬取步骤:

1.利用bs4和requests来获取网址的response以及解析网页

2.观察,寻找所需数据的位置,加以筛选

3.处理标签中文本,若数据大且有所关联则归整到字典

我们当然可以将一些基本操作封装成函数,以便操作:

def get_wb_data(url,label,headers=None):if(headers==None):response = requests.get(url)else:response=requests.get(url,headers=headers)soup=BeautifulSoup(response.text,'lxml')data=soup.select(label)return data
def print_data(data):for x in data:print(x.get_text())

所以,我们在针对一个或同一类网站若需要长期获取某一类信息,可以封装函数,可以更加便利。

想必看阅本文的都是希望接触python爬虫的初学者,在此建议:

多动手操作,去大胆爬取自己想要的信息,在这个过程中,会发现有许多东西爬不下来,这时,我们可以进一步去探索异步加载的处理,即如何应对动态网页的知识。

并且我们可能会遇到仅仅get是不足以获取数据的情况,那么就需要我们了解Headers,让爬虫去模仿人访问等知识。

再进一步,我们发现有的网站很多东西不断更新,专门进行反爬取,那么我们可能会接触破解验证码,如何避免封IP等问题。

…………(假装分界线)

笔者实在能力有限,对之后的种种还无法熟练操控,若笔者自认可以继续进一步讲解时,或许会有后续文章。

希望此文可以帮助一些初级入门的朋友,再次感谢。


【1】python爬虫入门,利用bs4以及requests获取静态网页相关推荐

  1. python爬虫入门之————————————————第三节requests详解

    1.下载安装 (1)命令安装方式 Windows:打开命令窗口行,直接运行包管理命令安装          pip install requests   or  essy_install reques ...

  2. Python爬虫攻略(1)使用Requests获取LOL游戏攻略

    申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删 Python爬虫教程>1 使用Requests获取LOL游戏攻略 前戏 如果你想先了解一下什么是爬虫, 建议看一下这篇文章:学习爬虫 ...

  3. Python爬虫入门-利用scrapy爬取淘女郎照片

    最近看到有个相对来说比较简单的可以爬取淘女郎的链接地址,它主要可以通过改变URL中page参数来实现翻页. 我们这个这个链接进入到一个淘女郎的页面,进入相册页面,里面有很多相册,我们打开其中一个,可以 ...

  4. Python爬虫入门记录1.0:获取网站某板块首页面资讯文章标题

    准备工作: IDE:pycharm 2018.3.5 Anaconda3-2018.12 + Python 3.7.1 1.导入相关的库 file -> settings -> proje ...

  5. python爬虫入门代码-Python爬虫入门

    原标题:python爬虫入门 基础知识 HTTP协议 我们浏览网页的浏览器和手机应用客户端与服务器通信几乎都是基于HTTP协议,而爬虫可以看作是一个另类的客户端,它把自己伪装成浏览器或者手机应用客户端 ...

  6. python爬虫入门教程--优雅的HTTP库requests(二)

    requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive.连接池.Cookie持久化.内容自动解压.HTTP代理.SSL认证等很多特性,下面这篇文章主要给大家介绍 ...

  7. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫

    [网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14  1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...

  8. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  9. Python爬虫入门之爬虫解析提取数据的四种方法

    本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助. 基础爬虫的固定模式 笔者这里所谈的基础爬虫,指的是不需要处理像异步 ...

最新文章

  1. jvm对象从新生代到老年代_深入理解jvm内存模型以及gc原理
  2. 【网络编程】——connect函数遇见EINTR的处理
  3. python函数在传参的时候,到底在传些什么?
  4. .so文件反编译_java加密防止反编译-VirboxProtector
  5. [转]动态添加Fragments
  6. github怎么隐藏自己的pr记录_在GitHub中向开源框架提交PR的过程
  7. SQLite指南(5) - PRAGMA命令用法(完整)
  8. Illustrator 教程,如何在 Illustrator 中编辑路径?
  9. mysql拼接两字段查询
  10. Linux Centos 常用命令整理
  11. Java使用ffmpeg将视频转为Mp4格式
  12. 概念模型向逻辑模型的转换规则
  13. 爆:中国互联网的那些黑色产业链(转)
  14. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
  15. 驾考通-小型汽车考试
  16. %md ,%0md ,%-md ,%m.nf
  17. fragments(二)
  18. 张宏系列又双叒叕售罄了
  19. mahout 推荐算法 java_Mahout推荐算法API详解
  20. Vivado时序分析

热门文章

  1. pxe装机原理_OpenStack Ironic实现原理简介
  2. 什么是事务和事务隔离级别
  3. 山东大学项目实训——地图圈系统——微信小程序(5)
  4. 编写第一个微信小程序界面
  5. php rrdtool,RRDtool 简介
  6. 小程序下拉框自定义样式picker修改样式picker-view修改样式
  7. K线形态识别_低档五阳线
  8. mysql创建hash索引
  9. java毕业设计游戏资讯网站Mybatis+系统+数据库+调试部署
  10. python高级(一)程序结构和异常处理