5分钟拿下爬虫

手把手带你5分钟搞定爬虫(聚焦爬虫)

爬虫的原理

对于很多刚入门的小伙伴来说,了解爬虫的工作原理是非常重要的。只有当你了解了它的原理,你才能结合实际情况写出对应的爬虫。下面我将以通俗的语言方式来介绍爬虫
把互联网比作一张巨大的网,那爬虫就是这张网上面的一只小蜘蛛,在互联网上面有很多的数据,各种各样的数据,我们可以把这些数据比作是被网粘住的小昆虫等。爬虫的作用就是去找到自己喜欢的口味,然后把它带回家,可以储存起来,也可以马上享受美味
所以说爬虫分为三部曲:
1、明确你自己喜欢什么口味(制定需求,明确你需要的数据类型)
2、去找到你喜欢的食物的位置(得到目标地址)
3、把食物搬回家去(解析网址,获取数据,存储数据)
它的整个流程就是:(简单的通过request请求获取数据并解析获取数据。以下都是固定化格式,可以照搬)
a、导入需要的库 requests

import requests

b、明确你要获取数据的网址(这里以百度网站为例)

url = 'http://www.baidu.com'

c、创建请求

response =  requests.get(url)

d、测试请求是否成功(在实际应用中用的比较少,正常情况都是可以请求成功的,网站对于访问外部信息的爬虫是不会做出限制的)

print("状态码:",response.status_code)

当状态码为“200”时表示请求成功;如果不是“200”,很大可能就是你的目标url写错了,核对一下url
e、得到网页源码

print("内容:",response.text)

response.content是response.text的二进制形式

至此,一个简单的爬虫请求就算是完成了。
当我们请求目标url并获取到response后,就需要进行下一步:解析网址并获取数据
f、解析网址
刚开始学习阶段,我们最常用的两种方法,一种是BeautifulSoup,一种是etree。其中BeautifulSoup是最常用的。以下将对两种方法分别进行介绍 (以下方法均为测试用例,实际当中应结合自己的实际情况选择应用)
BeautifulSoup:
首先导入需要的库文件:

from bs4 import BeautifulSoup

然后对上面请求得到的response进行解析:

html = respone.content.decode('utf-8')
soup = BeautifulSoup(html, 'lxml')

以下是BeautifulSoup中比较常见的方法,有兴趣的朋友可以去一一测试:

# 获取head标签
print('head标签内容', soup.head)
# 获取title标签
print('head标签内容', soup.title)
# 获取body里面的img内容
# 通过点号的方式只能获取 下属第一个标签(即获取soup下面第一个body里的第一个a标签的第一个img标签)
print(soup.body.a.img)   
# 获取所有的img标签  使用find_all()搜索整个soup对象
print("获取所有的img标签", soup.find_all('img'))
# 获取标签中的属性src地址
print("获取标签中的属性src地址:", soup.img['src'])      # 注意:英文点号都只能获取第一个值


# 获取soup的name
print("获取soup的name:",soup.name)
# 获取a标签名
print("a标签名字:",soup.a.name)
tag = soup.a
print(tag)
# 修改操作  a标签改为b标签
tag.name = 'b'   # 赋值后<a> </a>变为<b> </b>
# 输出修改后的内容
print("输出修改后的内容:",tag)
# 获取全部的属性 attrs
print("tag对象的全部属性:",tag.attrs)   # 只能得到当前标签的属性(不包含下属标签)

# 获取属性的class的值   根据键取值
print("获取属性的class的值:",tag["class"])




"""针对获取的标签属性可以进行增删改查"""
# 修改
tag["class"] = "Logo"
print("tag对象的全部属性:",tag.attrs)
# 输出属性
print("获取属性的class的值:",tag["class"])
# 新增  属性id  赋值logo
tag['id'] = 'logo'
print("tag对象的全部属性:",tag.attrs)
# 删除属性
del tag['class']
print("tag对象的全部属性:",tag.attrs)



"""针对内容操作  (只针对标签,对属性无效)"""
# 获取title标签内容
tag = soup.title
# 获取title字符串
print("tag对象所包含的字符串:", tag.string)
print("类型:", type(tag.string))
# 替换内容
tag.string.replace_with("你好")
print(tag.string)
# <!-- 学科建设 -->
# 获取注释文本内容
markup = '<b><!-- 学科建设 --></c>'
soup_comment = BeautifulSoup(markup, 'lxml')
comment = soup_comment.b.string                    # 以markup第一个标签作为关键进行搜索
print("获取注释文本内容:", comment)
# get_text()
print("title的全部节点:",soup.find_all("title"))
print("title的内容:",soup.title.get_text())
"""查找ul元素标签"""
# class是关键名,匹配时后面必须加下划线_
# tag = soup.find_all("ul", class_='menu')  # 按照css类名完全匹配
# print(tag)
tag = soup.find_all("ul", id='menu')  # 按照css类名完全匹配
print(tag)
# 查找名称为a元素的标签内容
taga = soup.find_all('a')
for tag in taga:
    print("查找名称为a元素的标签内容:", tag.string)
# get 获取属性信息  获取整个页面的img标签图片和src属性值
tagings = soup.find_all('img')
print(tagings)
# 循环输出图片地址
for imgsrc in tagings:
    print(url+imgsrc.get('src'))

""""属性只能做为参数,所有的操作只能针对标签"""

etree方法:
导入库文件:

from lxml import etree

解析得到的response对象;

# 设置response的字符集
html = req.content.decode('utf-8')
# 解析对象
html = etree.HTML(html,parser=etree.HTMLParser(encoding='utf-8'))

常用的方法:

# 定位head节点(元素)
result1 = html.xpath('head')
print(result1)
# 定位title节点
result2 = html.xpath('/html/head/title')
print(result2)
# 搜索节点  title节点
result3 = html.xpath('//title')
print(result3)
# 搜索title内容  text()得到文本信息
result4 = html.xpath("//title/text()")
print(result4)
# 搜索div节点
result5 = html.xpath('//div')
print(result5)
# 搜索div节点 并用class属性定位
result6 = html.xpath('//div[@class="news"]')
print(result6)
# 搜索div节点 id属性定位
result7 = html.xpath('//div[@id="news"]')
print(result7)
# 获取列表span信息
text = html.xpath('//div[@class="news"]/a/span/text()')
print(text)

g、通过上一步我们得到自己需要的数据后,下一步就是将我们得到的数据进行保存
保存的方式有很多种:
1、保存至文件
csv、json、text
2、保存至数据库
MySql、MongoDB、Redis 等 (目前主流的为以上列举的三种数据库)

关于数据存储后面再做详细介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

royallucky(视觉方向)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值