初识Python和使用Python爬虫
一.python基础知识了解:
1.特点:
Python的语言特性:
Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。
优点:
容易上手,代码简洁,代码量小,编写快速,三方库成熟
缺点:
第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。
第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
2.python能做什么:
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
- 网络应用:包括网站、后台服务等等,构建网络应用一般使用Django 或者 Flask这俩相对流行的框架。
- 数据科学:包括机器学习(scikit-learn和TensorFlow)、数据分析和数据可视化(Matplotlib)
- 脚本、爬虫
- 请求发送: 确定需要爬取数据的目标url以及发送请求(request)时所需要携带的数据和各种HTTP头部信息 (如user-agent, proxy IP, cookie)。发送请求时我们最常用的有python 3自带的urllib库和需要安装的第三方包requests库。
- 数据解析: 对返回的数据(response)进行解析,提取我们所需要的信息。常用的数据解析的库有python自带的html.parser, beautifulsoup(第三方库)、lxml(第三方库)。
- 数据存储: 对第2步提取的数据我们有时候需要对其进行清洗,有时会直接存入数据库,写入文件或缓存。
# 使用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框架 3) 构建scrapy框架项目 4) 初始化一个spider 叫做movie 针对主机名是“douban.com” 这时一个基本的Python爬虫框架就完成了,这里会根据模板生成一套代码 scrapy.cfg:配置文件 spiders:存放你Spider文件,也就是你爬取的py文件 items.py:相当于一个容器,和字典较像 middlewares.py:定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现 pipelines.py:定义Item Pipeline的实现,实现数据的清洗,储存,验证。 settings.py:全局配置 此时scrapy基本功能构建完成,需要进行目标功能构建 5)创建一个spider文件: 这里以动漫观看排行榜的数据为例子 #爬虫类 #数据item #pipeline后处理类 5)执行写好的爬虫,得到数据 scrapy crawl agefans --nolog 6)结果: 6.解析库 1)lxml的使用 使用pip3 install lxml安装库 XPath的常用规则:
- / 表示选取直接子节点
- // 表示选取所有子孙节点
- . 选取当前节点
- .. 选取当前结点的父节点
- @ 选取属性
- 获取直接子节点: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分别为下一个兄弟节点,上一个兄弟节点,上面所有的兄弟节点,下面所有的兄弟节点。
- 如果我们想要获取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()只返回一个值,匹配到符合要求的第一个值。用法和上面的方法一样
更多精彩