⽤Python爬取⽹页数据,⼿把⼿教会你!
其实在当今社会,⽹络上充斥着⼤量有⽤的数据,我们只需要耐⼼的观察,再加上⼀些技术⼿段,就可以获取到⼤量的有价值数据。这⾥的“技术⼿段”就是⽹络爬⾍。今天就给⼤家分享⼀篇爬⾍基础知识和⼊门教程:
什么是爬⾍?
爬⾍就是⾃动获取⽹页内容的程序,例如搜索引擎,Google,Baidu 等,每天都运⾏着庞⼤的爬⾍系统,从全世界的⽹站中爬⾍数据,供⽤户检索时使⽤。
爬⾍流程
其实把⽹络爬⾍抽象开来看,它⽆外乎包含如下⼏个步骤
模拟请求⽹页。模拟浏览器,打开⽬标⽹站。
获取数据。打开⽹站之后,就可以⾃动化的获取我们所需要的⽹站数据。
保存数据。拿到数据之后,需要持久化到本地⽂件或者数据库等存储设备中
那么我们该如何使⽤ Python 来编写⾃⼰的爬⾍程序呢,在这⾥我要重点介绍⼀个 Python 库:Requests。
Requests 使⽤
Requests 库是 Python 中发起 HTTP 请求的库,使⽤⾮常⽅便简单
模拟发送 HTTP 请求
发送 GET 请求
当我们⽤浏览器打开⾖瓣⾸页时,其实发送的最原始的请求就是 GET 请求
import requests
res = ('www.douban')
print(res)
print(type(res))
>>>
<Response [200]>
<dels.Response'>
可以看到,我们得到的是⼀个 Response 对象
如果我们要获取⽹站返回的数据,可以使⽤ text 或者 content 属性来获取
text:是以字符串的形式返回数据
content:是以⼆进制的⽅式返回数据
print())
)
>>>
<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('', 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 = ('', headers=header)
eclipse配置tomcat项目启动配置解析 HTML
现在我们已经获取到了⽹页返回的数据,即 HTML 代码,下⾯就需要解析 HTML,来提取其中有效的信息。
BeautifulSouplinux服务器压力测试
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 属性的节点
当然,XPath ⾮常强⼤,但是语法也相对复杂,不过我们可以通过 Chrome 的开发者⼯具来快速定位到元素的 xpath,如下图
得到的 xpath 为
//*[@id="anony-nav"]/div[1]/ul/li[1]/a
在实际的使⽤过程中,到底使⽤ BeautifulSoup 还是 XPath,完全取决于个⼈喜好,哪个⽤起来更加熟练⽅便,就使⽤哪个。
爬⾍实战:爬取⾖瓣海报
我们可以从⾖瓣影⼈页,进⼊都影⼈对应的影⼈图⽚页⾯,⽐如以刘涛为例⼦,她的影⼈图⽚页⾯地址为
下⾯我们就来分析下这个⽹页
⽬标⽹站页⾯分析
注意:⽹络上的⽹站页⾯构成总是会变化的,所以这⾥你需要学会分析的⽅法,以此类推到其他⽹站。正所谓授⼈以鱼不如授⼈以渔,就是这个原因。计算机程序的构造和解释pdf
Chrome 开发者⼯具
Chrome 开发者⼯具(按 F12 打开),是分析⽹页的绝佳利器,⼀定要好好使⽤。
我们在任意⼀张图⽚上右击⿏标,选择“检查”,可以看到同样打开了“开发者⼯具”,⽽且⾃动定位到了该图⽚所在的位置
可以清晰的看到,每张图⽚都是保存在 li 标签中的,图⽚的地址保存在 li 标签中的 img 中。
知道了这些规律后,我们就可以通过 BeautifulSoup 或者 XPath 来解析 HTML 页⾯,从⽽获取其中的图⽚地址。
html个人网页完整代码图片
代码编写
我们只需要短短的⼏⾏代码,就能完成图⽚ url 的提取
import requests
from bs4 import BeautifulSoup
url ='movie.douban/celebrity/1011562/photos/'
res = (url).text
content = BeautifulSoup(res,"html.parser")
data = content.find_all('div', attrs={'class':'cover'})
picture_list =[]
51单片机图形编程软件
for d in data:
plist = d.find('img')['src']
picture_list.append(plist)
print(picture_list)
>>>
['img1.doubanio/view/photo/m/public/p2564834267.jpg','img1.doubanio/view/photo/m/public/p860687617.jpg','img1.doubani o/view/photo/m/public/p2174001857.jpg','img1.doubanio/view/photo/m/public/p1563789129.jpg','img3.doubanio/view/photo/m /public/p2363429946.jpg','img1.doubanio/view/photo/m/public/p2382591759.jpg','img3.doubanio/view/photo/m/public/p236326918 2.jpg','img1.doubanio/view/photo/m/public/p1959495269.jpg','img3.doubanio/view/photo/m/public/p2356638830.jpg','img3. doubanio/view/photo/m/public/p1959495471.jpg','img3.doubanio/view/photo/m/public/p1834379290.jpg','img3.doubanio/view/ photo/m/public/p2325385303.jpg','img3.doubanio/view/photo/m/public/p2361707270.jpg','img3.doubanio/view/photo/m/public/p23 25385321.jpg','img3.doubanio/view/photo/m/public/p2196488184.jpg','img1.doubanio/view/photo/m/public/p2186019528.jpg','http s://img1.doubanio/view/photo/m/public/p2363270277.jpg','img3.doubanio/view/photo/m/public/p2325240501.jpg','img1.doubanio.c om/view/photo/m/public/p2258657168.jpg','img1.doubanio/view/photo/m/public/p2319710627.jpg','img3.doubanio/view/photo/m/pu blic/p2319710591.jpg','img3.doubanio/view/photo/m/public/p2311434791.jpg','img1.doubanio/view/photo/m/public/p2363270708.jp g','img3.doubanio/view/photo/m/public/p2258657185.jpg','img3.doubanio/view/photo/m/public/p2166193915.jpg','img3.dou banio/view/photo/m/public/p2363265595.jpg','img3.doubanio/view/photo/m/public/p2312085755.jpg','img3.doubanio/view/pho to/m/public/p2311434790.jpg','img3.doubanio/view/photo/m/public/p2276569205.jpg','img1.doubanio/view/photo/m/public/p21653 32728.jpg']

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。