前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目实战 | Python爬虫概述与实践(一)

项目实战 | Python爬虫概述与实践(一)

作者头像
用户3946442
发布2022-04-11 18:45:26
5300
发布2022-04-11 18:45:26
举报
文章被收录于专栏:程序媛驿站

目录

1 定义

2 分类

3 基本流程

4 总结

1 定义

爬虫,又称为网络蜘蛛、网络机器人等,简单来说,就是请求网站并提取数据的自动化程序,可以代替人工在互联网上收集数据。

2 分类

通用网络爬虫

搜索引擎离不开爬虫,比如百度搜索引擎的爬虫叫百度蜘蛛(Baiduspider)、Bing的Bingbot、360的360Spider、搜狗的SougouSpider。搜索引擎的爬虫每天在海量的网页中爬取优质的信息并进行收录,根据用户输入的关键字在收录的信息中找到相关网页,并按照一定的算法进行排序显示给用户。这种在全互联网上获取信息的爬虫称为 通用网络爬虫或全网爬虫。

聚焦网络爬虫

聚焦网络爬虫,也叫主题网络爬虫,是根据我们的需求有选择性的爬取相关内容,在《十分钟生成自己的疫情地图,小白都能立刻上手》文章中,小媛儿获取疫情统计数据所用的爬虫,就是这种类型。

3 基本流程

基本流程主要包括四步:

  • 发起请求
  • 获取内容
  • 解析内容
  • 保存数据

爬虫的基本流程前两步是在模仿浏览器对服务器进行Resquest,获取从服务器的Response信息。

我们先来看一下浏览器对服务器的http请求过程

我们看到的网页是浏览器多次对服务器发送请求解析的结果,整个交互过程可以在浏览器中 通过 右击-检查(或审查元素)-Network 查看。

比如我们在浏览器中输入www.bing.com,查看的结果如图。

需要注意的在Request头部中包含请求方式(GET\POST\PUT\DELETE等),在Response报文头部中有一个 3位数字的“状态码”字段,其中200表示相应成功

发起请求

通过HTTP库指定URL向目标站点发起请求,即发送一个Request,等待服务器响应。python中发起请求常用的库主要包括urllib,requests。

代码语言:javascript
复制
import requests
url='https://www.bing.com'    #指定目标服务器url
response=requests.get(url)    #请求方式为get

获取内容

如果服务器能正常响应,会得到一个Response,Response的内容就是所要获取的页面内容,类型可能有HTML、JSON字符串、二进制(图片、视频)等。

举个简单例子,我们想要爬取bing首页的信息

代码语言:javascript
复制
import requests
url='https://www.bing.com'    #指定目标服务器url
response=requests.get(url)    #请求方式为get
response.encoding='utf-8'     #设置编码格式,避免中文乱码
print(response.status_code)   #检测response状态码,200表示爬取成功
print(response.text)          #输出相应内容

输出结果部分截图:

代码语言:javascript
复制
200
<!DOCTYPE html><html lang="zh"><script type="text/javascript" >//<![CDATA[
si_ST=new Date
//]]></script><head><link id="bgLink" rel="preload" href="/th?id=OHR.BWFlipper_ZH-CN1813139386_1920x1080.jpg&amp;rf=LaDigue_1920x1080.jpg&amp;pid=hp" as="image" /><link rel="preload" href="/sa/simg/hpc27.png" as="image" /><meta content="text/html; charset=utf-8" http-equiv="content-type"/><script type="text/javascript">//<![CDATA[
/*!DisableJavascriptProfiler*/
0;

状态码=200表示爬取成功,爬取的Response与必应Network选项卡的Respones内容是一致的。

内容解析

如何从爬取的信息中提取我们需要的内容,主要包括六种解析方法,在Python爬虫后续系列文章中,我们会通过具体实例详细介绍。

Tips:

为什么有时候爬取的内容和网页看到的内容不一致?

比如访问头条官网www.taotiao.com,我们在网页看到的内容是这样的

然而通过requests爬取的html中并不能找到 页面中的新闻标题。

答:这是由于很多的页面是浏览器动态加载的,浏览器通过Ajax发送请求,js拿到数据后在页面上解析。当我们打开头条首页时,并没有显示网页中全部的新闻内容,而是在向下滑动鼠标时不断加载的,对于这种页面,通过Request请求,在Resonse中可以拿到html,但是爬取的html中并不包括页面中全部信息。

可以使用Selenium+WebDriver来解决,前面介绍的爬虫是已经绕过了浏览器,从程序向服务器发出请求。而Selenium本身是自动化测试的工具,可以驱动或操控浏览器,服务器的Response也是在浏览器端做一个渲染,可以很好的解决动态加载的问题。

代码语言:javascript
复制
#pip install selenium
from selenium import webdriver   #引入模块
driver=webdriver.Chrome()        #创建驱动Chrome()运行会打开Chrome浏览器
driver.get('https://www.toutiao.com')
print(driver.page_source)       #信息从driver中拿出来

返回结果部分截图:

代码语言:javascript
复制
</div> <div class="news-inner"><p class="module-title">“美国杀手”的P2P陷阱:财经红人,套住自家的8亿元“韭菜”</p></div></a></li><li class="article-item"><a href="/group/6815369661148824072/" target="_blank" class="news-link"><div class="module-pic news-pic"><img src="//p1.pstatp.com/list/240x240/pgc-image/Rw5jvZPIiRMNsp" lazy="loaded"></div> <div class="news-inner"><p class="module-title">美国约翰斯·霍普金斯大学修正疫情数据:全球确诊病例总数为1918855例</p></div></a></li><li class="article-item"><a href="/group/6815343607461970443/" target="_blank" class="news-link"><div class="module-pic news-pic"><img src="//p1.pstatp.com/list/240x240/pgc-image/fa4cfb63abd14bc8a6b504b0251f43e3" lazy="loaded"></div> <div class="news-inner"><p class="module-title">

这时已经可以从爬取得html中找到新闻标题相关的文字了。

保存数据

4 总结

本文主要介绍python爬虫的定义、分类和基本流程,后续连载文章中我们将会用实践项目详细介绍具体细节,感兴趣记得关注“程序媛驿站”,记得关注每周更新的“python爬虫概述与实践”

作者:balabala

编辑:葡萄媛

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序媛驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档