初识Python和使用Python爬虫

初识Python和使用Python爬虫一.python基础知识了解:1.特点:Python的语言特性:Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同

大家好,又见面了,我是你们的朋友全栈君。

 一.python基础知识了解:
 

1.特点:
Python的语言特性:

Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。

优点:

  容易上手,代码简洁,代码量小,编写快速,三方库成熟

缺点:

  第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。

  第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
 

2.python能做什么:
  • 网络应用:包括网站、后台服务等等,构建网络应用一般使用Django 或者 Flask这俩相对流行的框架。
  • 数据科学:包括机器学习(scikit-learn和TensorFlow)、数据分析和数据可视化(Matplotlib)
  • 脚本、爬虫
3.python的版本问题:
目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的(语法发生改变)。由于3.x版越来越普及,所以直接使用3.x版本
 

4.hello world:
print(“hello world”)
 
5.一段简单的代码:
# 这是一行注释 a = 100 if a >= 0: print(a) else: print(-a)
python中使用#来表示注释

当语句以冒号:结尾时,缩进的语句视为代码块。

缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。

缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。

 

二.python爬虫:
 

1.什么是爬虫(spider):
爬虫(spider)的本质是一个向网站或URL发送请求, 获取资源后分析并提取有用数据的应用程序。它可以用来获取文本数据,也可以用来下载图片或音乐,还可以用来抢票。各大IT公司如阿里, 百度, 新浪和今日头条都大规模的应用了爬虫技术。比如阿里云网站上的IT技术类文章都是从CSDN, CNBlogs和微信公众号等原创平台上爬来的。新浪上的政府新闻很多也是直接从各大部委网站直接爬过来的。

 

2.为什么用python来写爬虫:
1)PHP语言  虽然是世界上最好的语言,但是他天生不是干这个的,而且对多线程、异步支持不够好,并发处理能力很弱。爬虫是工具性程序,对速度和效率要求比较高。

2)Java 语言 Java 的网络爬虫生态圈也很完善,是Python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。  重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。

3)C/C++语言 运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢,是很慢。  能用C/C++做爬虫,只能说是能力的表现,但是不是正确的选择。

4)Python 语言 语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。 还有强大的爬虫Scrapy框架,以及成熟高效的 scrapy-redis分布式策略。而且,调用其他语言的接口也非常方便(胶水语言)

关于scrapy-redis 引用这里:https://www.cnblogs.com/pythoner6833/p/9148937.html

总结:各个语言都有办法能写爬虫程序,只是python更加适合,而且有成熟的框架,写起来比较简单易上手
 

3.爬虫的工作流程:
  • 请求发送: 确定需要爬取数据的目标url以及发送请求(request)时所需要携带的数据和各种HTTP头部信息 (如user-agent, proxy IP, cookie)。发送请求时我们最常用的有python 3自带的urllib库和需要安装的第三方包requests库。
  • 数据解析: 对返回的数据(response)进行解析,提取我们所需要的信息。常用的数据解析的库有python自带的html.parser, beautifulsoup(第三方库)、lxml(第三方库)。
  • 数据存储: 对第2步提取的数据我们有时候需要对其进行清洗,有时会直接存入数据库,写入文件或缓存。
4.一个最简单的爬虫:
# 使用RequestsCookieJar来构建cookie
cookie_jar = RequestsCookieJar()
for k, v in d.items():
cookie_jar.set(k, v)
# 创建headers
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko'
header = {
     "User-Agent": user_agent
}

1.使用requests创建请求
req = requests.get(url, headers=header, cookies=cookie_jar)
2.使用beautifulsoup来解析请求到的数据
if req.status_code == 200:
     soup = bs(str(req.content, 'GBK'), 'html.parser')
3.soup中保存了方便解析的请求到的数据
result = soup.find_all('div', class_='paper-bt')[0].get_text()
4.对抓取到的数据保存或者输出
print(result)

 

5.使用scrapy构建爬虫
1) Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

2) 安装 scrapy框架

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

3) 构建scrapy框架项目

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

4) 初始化一个spider 叫做movie 针对主机名是“douban.com”

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

这时一个基本的Python爬虫框架就完成了,这里会根据模板生成一套代码

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

 

scrapy.cfg:配置文件

spiders:存放你Spider文件,也就是你爬取的py文件

items.py:相当于一个容器,和字典较像

middlewares.py:定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现

pipelines.py:定义Item Pipeline的实现,实现数据的清洗,储存,验证。

settings.py:全局配置

此时scrapy基本功能构建完成,需要进行目标功能构建
 

5)创建一个spider文件:

这里以动漫观看排行榜的数据为例子

#爬虫类

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

#数据item

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

#pipeline后处理类

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

 

5)执行写好的爬虫,得到数据

scrapy crawl agefansnolog
 
6)结果:

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

 

6.解析库
1)lxml的使用
使用pip3 install lxml安装库

XPath的常用规则:

  • / 表示选取直接子节点
  • // 表示选取所有子孙节点
  • . 选取当前节点
  • .. 选取当前结点的父节点
  • @ 选取属性
<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

还是拿上面的解析方法来举例:

response.xpath(‘//li[@class=”rank_text”]’)
代表选取所有li标签class属性为“rank_text”的子孙节点
 

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

直接就筛选到了如下数据的集合

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

接着从集合中遍历每个节点下的数据

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

 

2)BeautifulSoup的使用
使用 pip3 install BeautifulSoup安装

 

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

soup = BeautifulSoup(str(req.content, ‘utf-8’), ‘lxml’) 这里是使用了lxml的解析器来解析,python自带的解析器为‘html.parser’
 

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

2.2获取属性值

比如,我们想要获取img的src属性,我们只需要,soup.img[‘src’]就可以获取到,soup.img.arrts[‘src’]也可以获取到。

如果想获取到所有的属性就这样写:soup.img.arrts即可

 

2.3获取直接子节点和子孙节点,父节点,祖先节点,兄弟节点

  • 获取直接子节点:contents,例如我想获取p标签的直接子节点:soup.p.contents即可
  • 获取子孙节点:descendants,例如我想获取p标签的子孙节点:soup.p.descendants即可
  • 获取父节点:parent属性,例如我想获取p标签的父节点:soup.p.parent即可
  • 获取祖先节点:parents属性,例如我想获取p标签的祖先节点:soup.p.parents即可
  • 获取兄弟节点:next_sibling,previous_sibling,next_siblings,previous_siblings分别为下一个兄弟节点,上一个兄弟节点,上面所有的兄弟节点,下面所有的兄弟节点。
 

2.4获取文本属性

string为获取文本

attrs为获取属性

 

2.5方法选择器

find_all()返回的一个列表,匹配所有符合要求的元素

  • 如果我们想要获取ul可以这样写:soup.find_all(name=’ul’)
  • 如果我们想要获取id为id1属性可以这样写:soup.find_all(arrts[id=’id1′])
  • 如果我们想要获取class为class1属性可以这样写:soup.find_all(arrts[class_=’class1′])因为class有特殊意义,所以我们获取class的时候价格_即可
  • 如果我们想要获取文本值可以这样写:soup.find_all(text=re.compile(”))匹配text需要用到正则,匹配你想要的text值
  • find()只返回一个值,匹配到符合要求的第一个值。用法和上面的方法一样
 

解析结果:

<span role="heading" aria-level="2">初识Python和使用Python爬虫
 

 by 张轶

 

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156126.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1073. 树的中心(树形dp)[通俗易懂]

    1073. 树的中心(树形dp)[通俗易懂]给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。输入格式第一行包含整数 n。接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai 和 bi 之间存在一条权值为 ci 的边。输出格式输出一个整数,表示所求点到树中其他结点的最远距离。数据范围1≤n≤10000,1≤ai,bi≤n,1≤ci≤105 输入样例: 5 2 1 1 3 2 1 4 3 1 5 1

    2022年8月8日
    3
  • 当温度升高时二极管的反向饱和电流_二极管的反向饱和电流在20度时是

    当温度升高时二极管的反向饱和电流_二极管的反向饱和电流在20度时是三极管参数:型号8050;电流放大倍数β\betaβ=311。如下的电路。施加工作电压5V,电路中静态工作点电压如下图所示。使用TH2821ALCR表,去掉电阻R3R_3R3​之后,测量电路在加电之后的输入电阻:RiR_iRi​=3090Ω\OmegaΩ。…

    2022年9月10日
    1
  • 信用标准评分卡模型开发及实现方案_信用评分卡模型的建立

    信用标准评分卡模型开发及实现方案_信用评分卡模型的建立一、信用风险评级模型的类型信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主体的融资用途,分为企业融资模型、现金流融资模型和项目融资模型等。A卡,又称为申请者评级模型,主要应用于相关融资类业务中新用户的主体评级,适用于个人和机构融资主体。B卡,又称为行为评级模型

    2022年10月22日
    0
  • SAP Web IDE环境搭建 – 详细指导

    SAP Web IDE环境搭建 – 详细指导SAPWebIDE介绍在前面我的一些文章中已经有了SAPWebIDE的介绍,还包括了本地的WEBIDE的搭建,以及使用Eclipse作为Fiori开发的平台.不过目前看来,SAP的策略是以云为主,所以将来对于Fiori的开发都会基于SAPWebIDE云端的版本,本文将会详细的介绍如何搭建WebIDE云端版本.什么是SAPWebIDESAPWebIDEisa

    2022年10月17日
    0
  • nginx反向代理服务contextpath的问题解决

    nginx反向代理服务contextpath的问题解决文章目录问题描述解决方案 sub filter 方案使用重定向单独域名访问问题描述现在的企业服务 往往不是单体的 同时可能涉及中间件的访问如 dubbo solr mq 等 对于中间件的监控页面访问 如果直接暴露在公网 肯定这安全 需发对中间件访问进行安全加固 方法主要有 1 限制使用 IP 白名单访问 2 安全密码访问 不使用简单密码 对于没有密码的 可以使用 basic 认证 强密码访问 3

    2025年7月11日
    1
  • 线上问题排查,一不小心踩到阿里的 arthas坑了

    线上问题排查,一不小心踩到阿里的 arthas坑了

    2020年11月19日
    226

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号