python抓取网页数据( [TOC]Python爬虫基础简介Python爬取爬取基础 )

优采云 发布时间: 2022-04-07 07:01

  python抓取网页数据(

[TOC]Python爬虫基础简介Python爬取爬取基础

)

  

  [目录]

  Python爬虫基础知识

  介绍

  在Python爬虫爬取的网页信息中,HTML是网站的主要结构,CSS是网页的外观细节,JavaScript是页面处理动作,通过分析HTML文本提取信息。

  了解网页

  以 Python 中文网站 homepage() 为例,抓取中国旅游网首页的第一条信息(标题和链接),数据以明文形式出现在源代码中。在Python中文网站首页,按快捷键【Ctrl+U】打开源码页面,如图:

  

  了解网页结构

  网页一般由三部分组成,分别是HTML(超文本标记语言)、CSS(层叠样式表)和JScript(主动脚本语言)。

  HTML

  HTML是整个网页的结构,相当于整个网站的框架。带有“<”、“>”的符号是HTML标签,标签是成对的。

  常用标签如下:

  

  CSS

  CSS表示样式,图1中的第13行<style type="text/css">表示下面引用了一个CSS,其中定义了外观。

  脚本

  JScript 表示函数。交互内容和各种特效在JScript中,在网站中描述了各种功能。

  如果用人体来类比,HTML 就是人体骨骼,定义了人的嘴巴、眼睛、耳朵等应该长在哪里。CSS是一个人的外貌细节,比如嘴巴是什么样子,眼睛是双眼皮还是单眼皮,眼睛是大是小,皮肤是黑是白等等。JScript代表了人类的技能,比如如跳舞、唱歌或演奏乐器。

  Python爬虫基本原理

  介绍

  网页请求的过程分为两部分:Request(请求)和Response(响应)。Python爬虫模拟这种行为,通过请求获取网页信息。

  网页请求的过程分为两部分:

  请求(request):每一个展示给用户的网页都必须经过这一步,也就是向服务器发送一个访问请求。

  响应(response):服务器收到用户的请求后,会验证请求的有效性,然后将响应的内容发送给用户(客户端)。客户端接收到服务端响应的内容并显示出来,这是我们所熟悉的。网页请求,如图。

  

  请求网页有两种方式:

  GET:最常用的方法,一般用于获取或查询资源信息,也是大多数网站使用的方法,响应速度快。

  POST:相比GET方式,多了表单上传参数的功能,所以除了查询信息,还可以修改信息。

  因此,在编写爬虫之前,首先要确定将请求发送给谁以及如何发送。

  获取请求和发布请求

  介绍

  GET:最常用的方法,一般用于获取或查询资源信息,也是大多数网站使用的方法,响应速度快。POST:相比GET方式,多了表单上传参数的功能,所以除了查询信息,还可以修改信息。

  使用 GET 方法获取数据

  请求对象为,请求方式为GET(源码中所有数据请求方式均为GET)[1]

  确定好请求对象和方法后,在 PyCharm 中输入如下代码:

  import requests #导入requests包url = 'http://www.cntour.cn/'strhtml = requests.get(url) #Get方式获取网页数据print(strhtml.text)

  用于加载库的语句是 import + library name。上述过程中,加载requests库的语句为:import requests。

  通过 GET 获取数据,需要调用 requests 库中的 get 方法。方法是在请求后输入英文句点,如下图:

  requests.get

  将获取到的数据存放在strhtml变量中,代码如下:

  strhtml = request.get(url)

  这时候strhtml是一个URL对象,代表了整个网页,但是此时只需要网页中的源码。以下语句代表网页的源代码:

  strhtml.text

  使用 POST 方法抓取数据

  准备

  一、进入有道翻译网站:进入有道翻译页面。

  按快捷键F12,进入开发者模式,点击网络,此时内容为空

  

  在有道翻译中输入“我爱中国”,点击“翻译”按钮

  

  在开发者模式下,点击“Network”按钮,然后点击“XHR”按钮来查找翻译数据

  

  点击Headers,发现请求数据的方法是POST。

  在找到数据在哪里以及如何请求它之后,就该开始编写爬虫了。

  爬行

  首先,复制Headers中的url,赋值给url,代码如下:

  url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

  POST 请求中获取数据的方式与 GET 不同。POST 请求数据必须使用请求标头构造。

  Form Data中的请求参数如图15所示:

  

  复制它并构建一个新字典:

  From_data={'i':'我愛中國','from':'zh-CHS','to':'en','smartresult':'dict','client':'fanyideskweb','salt':'15477056211258','sign':'b3589f32c38bc9e3876a570b8a992604','ts':'1547705621125','bv':'b33a2f3f9d09bde064c9275bcb33d94e','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'}

  接下来使用requests.post方法请求表单数据,代码如下:

  import requests #导入requests包response = requests.post(url,data=payload)

  将字符串格式的数据转换成JSON格式的数据,根据数据结构提取数据,并打印出翻译结果。代码如下:

  使用requests.post方法抓取有道翻译结果的完整代码如下:

  import requests #导入requests包import jsondef get_translate_date(word=None): url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' From_data={'i':word,'from':'zh-CHS','to':'en','smartresult':'dict','client':'fanyideskweb','salt':'15477056211258','sign':'b3589f32c38bc9e3876a570b8a992604','ts':'1547705621125','bv':'b33a2f3f9d09bde064c9275bcb33d94e','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'} #请求表单数据 response = requests.post(url,data=From_data) #将Json格式字符串转字典 content = json.loads(response.text) print(content) #打印翻译后的数据 #print(content['translateResult'][0][0]['tgt'])if __name__=='__main__': get_translate_date('我爱中国')

  用 Beautiful Soup 解析网页

  介绍

  Beautiful Soup 是一个 Python 库,其主要功能是从网页中抓取数据。

  网页的源代码已经可以通过requests库获取,接下来就是从源代码中查找并提取数据。Beautiful Soup 是一个 Python 库,其主要功能是从网页中抓取数据。Beautiful Soup 已经移植到 bs4 库,也就是说在导入 Beautiful Soup 时需要安装 bs4 库。

  

  安装完bs4库后,需要安装lxml库。如果我们不安装 lxml 库,将使用 Python 默认解析器。虽然 Beautiful Soup 同时支持 Python 标准库中的 HTML 解析器和一些第三方解析器,但是 lxml 库更强大更快,所以我推荐安装 lxml 库。

  安装完Python第三方库后,输入以下代码,开启美汤之旅:

  import requests #导入requests包from bs4 import BeautifulSoupurl='http://www.cntour.cn/'strhtml=requests.get(url)soup=BeautifulSoup(strhtml.text,'lxml')data = soup.select('#main>div>div.mtop.firstMod.clearfix>div.centerBox>ul.newsList>li>a')print(data)

  

  Beautiful Soup 库可以轻松解析网页信息,它集成在 bs4 库中,需要时可以从 bs4 库中调用。其表达式如下:

  from bs4 import BeautifulSoup

  首先将 HTML 文档转换为 Unicode 编码格式,然后 Beautiful Soup 选择最合适的解析器来解析这个文档,这里指定了 lxml 解析器进行解析。解析后将复杂的 HTML 文档转换为树形结构,每个节点都是一个 Python 对象。这里将解析后的文档存放在新创建的变量soup中,代码如下:

  soup=BeautifulSoup(strhtml.text,'lxml')

  接下来,使用select(选择器)来定位数据。定位数据时,需要使用浏览器的开发者模式,将鼠标光标停留在对应的数据位置并单击鼠标右键,然后在快捷菜单中选择“检查”命令。

  

  然后浏览器右侧会弹出开发者界面,右侧突出显示的代码(见图19(b))对应左侧突出显示的数据文本(见图19(a))。右击右侧突出显示的数据,在弹出的快捷菜单中选择“复制”➔“复制选择器”命令,自动复制路径。

  

  将路径粘贴到文档中,代码如下:

  #main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a

  由于这个路径是第一个选择的路径,而且我们需要获取所有的标题,所以删除li:nth-child(1)中冒号后面的部分(包括冒号),代码如下:

  #main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a

  使用soup.select引用这个路径,代码如下:

  data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a')

  data 是提取的内容。

  参考

  [1]、请求方式为GET(源码中所有数据请求方式均为GET):、请求方式为GET(源码中所有数据请求方式均为GET)

  结尾

  时间在事物的变迁中流逝,春花如梦,流水不见踪影,最想做的事却没有去做,都是人生的遗憾。生活需要深思熟虑和冲动。

  

  

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线