初识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)
上一篇 2022年7月6日 上午7:46
下一篇 2022年7月6日 上午7:46


相关推荐

  • python3实现AES加密

    python3实现AES加密前言这几天研究了一下 python 实现 AES 加密 有很多坑 AES 加密的参数及其条件这个 AES 加密的主要坑就在于这些条件 首先 aes 加密有一下几个参数秘钥 加密的时候用秘钥 解密的时候需要同样的秘钥才能解出来明文 需要加密的参数模式 aes 加密常用的有 ECB 和 AES 模式 我只用了这两个模式 还有其他模式 iv 偏移量 这个参数在 ECB 模式下不需要 在

    2026年3月16日
    2
  • QThread如何优雅实现暂停(挂起)功能

    QThread如何优雅实现暂停(挂起)功能一、实现思路QThread中有start、quit,但是没有pause,那么我们想要实现这个功能。我们继承QThread,重写run();第一反应是不是应该添加个标志,在run()中判断暂停状态。嗯,没错,不过我们不能用普通变量,否则有线程非安全风险。这里使用C++提供的原子类型std::atomic_bool。线程暂停期间,不能空跑消耗cpu,故我们使用Qt条件变量QWaitCondition,配合QMutex。大概就是这么点内容吧,实现代码如下:Thread.h#include&lt

    2022年5月27日
    43
  • 三种常见的 Mac 安装 git 工具的方法

    三种常见的 Mac 安装 git 工具的方法目录前言正文一 佛系法二 brew 法三 终极大法结尾前言有时候新 Mac 本子需要安装 git 工具 或者原来的 git 工具损坏了 再或者需要升级 git 版本 都需要涉及重新安装 git 本文将介绍三种常见的安装方法 正文一 佛系法这种安装方式完全随缘了 所以称为佛系法 首先 在 Mac 本子上执行如下命令 gitversion 如果本子上已经安装了 git 工具 会输出类似下面的版本信息 gitversion2 24 3

    2026年3月18日
    2
  • 高精度快速阶乘算法

    高精度快速阶乘算法    我在业余时间开发了一套《超大整数完全精度快速算法库》HugeCalc,可快速计算超大整数的加、减、乘、除(商/余)、乘方、开方,也可快速计算大数的Fibonacci数列、(双)阶乘、排列、组合等,还可完成超大整数数组的最大公约数、最小公倍数等数论运算,现在,该套软件已被华军、天空、电脑之家、天天等下载站点收录。    自在网上公开以来,广受网友关注,经常有网友来联系,想交流一些算法心

    2022年7月24日
    12
  • git提交规范说明

    git提交规范说明在使用 GIT 操作的时候 我们最好在一开始就养成一个良好的提交说明规范 这和我们初学编程时候使用的注释是同样的道理 能够让我们提交的更改更加清晰易理解 特别是在多人合作的情况下 如果没有一个好的提交规范 那很难让别人看懂自己更改了什么地方一 提交格式 type scope message 二 参数介绍 1 type 指的代码的提交类型 不同的提交类型表示对应不同的代码改动 比如 feat 新功能的开发 fix bug 的修复 docs 文档格式的改动 style 代码格式改变 refactor 对已

    2026年3月18日
    2
  • bufferedwriter类_flatfileitemreader

    bufferedwriter类_flatfileitemreader如果单独使用FileWriter也可以。上面这个加了一个缓冲,缓冲写满后在将数据写入硬盘。你每写一个数据,硬盘就有一个写动作,性能极差。BufferedWriter是修饰者。FileWriter是被修饰者。这里有一个”修饰类”的概念。这样做极大的提高了性能。…

    2025年7月16日
    7

发表回复

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

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