Python爬虫入门教程!

什么是爬虫?
爬虫就是自动获取网页内容的程序,例如搜索引擎,Google,Baidu 等,每天都运行着庞大的爬虫系统,从全世界的网站中爬虫数据,供用户检索时使用。
爬虫流程
其实把网络爬虫抽象开来看,它无外乎包含如下几个步骤:

  1. 模拟请求网页。模拟浏览器,打开目标网站。
  2. 获取数据。打开网站之后,就可以自动化的获取我们所需要的网站数据。
  3. 保存数据。拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。

那么我们该如何使用 Python 来编写自己的爬虫程序呢,在这里我要重点介绍一个 Python 库:Requests。

模拟发送 HTTP 请求
发送 GET 请求
当我们用浏览器打开豆瓣首页时,其实发送的最原始的请求就是 GET 请求

import requests 
res = requests.get('http://www.douban.com') 
print(res) 
print(type(res)) 
>>> 
<Response [200]> 
<class 'requests.models.Response'> 

可以看到,我们得到的是一个 Response 对象

如果我们要获取网站返回的数据,可以使用 text 或者 content 属性来获取

text:是以字符串的形式返回数据

content:是以二进制的方式返回数据

print(type(res.text)) 
print(res.text) 
>>> 
<class 'str'> <!DOCTYPE HTML> 
<html lang="zh-cmn-Hans" class=""> 
<head> 
<meta charset="UTF-8"> 
<meta name="google-site-verification" content="ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw" /> 
<meta name="description" content="提供图书、电影、音乐唱片的推荐、评论和价格比较,以及城市独特的文化生活。"> 
<meta name="keywords" content="豆瓣,广播,登陆豆瓣">..... 

发送 POST 请求
对于 POST 请求,一般就是提交一个表单

r = requests.post('http://www.xxxx.com', data={"key": "value"}) 

data 当中,就是需要传递的表单信息,是一个字典类型的数据。

header 增强
对于有些网站,会拒绝掉没有携带 header 的请求的,所以需要做一些 header 增强。比如:UA,Cookie,host 等等信息。

header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36", 
         "Cookie": "your cookie"} 
res = requests.get('http://www.xxx.com', headers=header) 

解析 HTML
现在我们已经获取到了网页返回的数据,即 HTML 代码,下面就需要解析 HTML,来提取其中有效的信息。

BeautifulSoup
BeautifulSoup 是 Python 的一个库,最主要的功能是从网页解析数据。

from bs4 import BeautifulSoup  # 导入 BeautifulSoup 的方法 
# 可以传入一段字符串,或者传入一个文件句柄。一般都会先用 requests 库获取网页内容,然后使用 soup 解析。 
soup = BeautifulSoup(html_doc,'html.parser')  # 这里一定要指定解析器,可以使用默认的 html,也可以使用 lxml。 
print(soup.prettify())  # 按照标准的缩进格式输出获取的 soup 内容。

BeautifulSoup 的一些简单用法

print(soup.title)  # 获取文档的 title 
print(soup.title.name)  # 获取 title 的 name 属性 
print(soup.title.string)  # 获取 title 的内容 
print(soup.p)  # 获取文档中第一个 p 节点 
print(soup.p['class'])  # 获取第一个 p 节点的 class 内容 
print(soup.find_all('a'))  # 获取文档中所有的 a 节点,返回一个 list 
print(soup.find_all('span', attrs={'style': "color:#ff0000"}))  # 获取文档中所有的 span 且 style 符合规则的节点,返回一个 list 

具体的用法和效果,我会在后面的实战中详细说明。
XPath 定位
XPath 是 XML 的路径语言,是通过元素和属性进行导航定位的。几种常用的表达式

表达式含义node选择 node 节点的所有子节点/从根节点选取//选取所有当前节点.当前节点…父节点@属性选取text()当前路径下的文本内容

一些简单的例子

xpath('node')  # 选取 node 节点的所有子节点 
xpath('/div')  # 从根节点上选取 div 元素 
xpath('//div')  # 选取所有 div 元素 
xpath('./div')  # 选取当前节点下的 div 元素 
xpath('//@id')  # 选取所有 id 属性的节点 

在这里插入图片描述

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王不叫小王叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值