【Python】学习笔记 #1 —— 爬取网页筛选数据全过程
目录
Step 1:下载requests包
Step 2:导包
Step 3:requests使用
Step 4:Re的使用
Step 5:os的使用
Step 6:保存文件
Step 7:综合案例
Step 1:下载requests包
常见的方式是在windows系统上win+R调出运行,输入cmd进入控制台。
输入指令pip list可以看见目前已经安装的包
下载requests包指令为:pip install requests
由于下载包默认引用的地址是国外的网站,因此可能出现界面卡住,进度条过慢的情况,
一般我们手动通过引用国内镜像源,例如:
1、清华 https://mirrors.tuna.tsinghua.edu.cn/
2、中科大USTC镜像源 https://mirrors.ustc.edu.cn/
3、163 http://mirrors.163.com/
4、阿里 https://opsx.alibaba.com/mirror
引用清华镜像源后的下载指令为:pip install requests -i https://mirrors.tuna.tsinghua.edu.cn/
Tips:不排除有新手程序员安装了多个版本的python,导致pycharm里查看下载的包的时候与控制台不一致的问题。
解决方式是,在需要的工程中,点开下方的Terminal,在出现的控制台中输入指令下载也是可以的。
另:注意联网
Step 2:导包
本次我的学习案例中,共需导入3个包:
import requests # 实用的Python HTTP客户端库
import os # 包含负责新建文件、改文件名、路径、操作电脑系统相关的功能集合的包
import re # 包含使用正则表达式的包
Step 3:requests使用
requests的请求方式有两种:get与post
面对不同的网站,使用get还是post需要灵活变对。
以站长素材(https://sc.chinaz.com/),谷歌浏览器为例:
鼠标右击,点击最下面的检查,弹出检查框,选择Network,点击第一个文件,再选择headers,出现如下信息:
其中,General下对应的Request Method对应的值为GET,
由此可见,我们本次使用的requests方法应为对应的get方法。
import requestsurl = "https://sc.chinaz.com/"response = requests.get(url)
利用requests.get(url)的方式去获取页面信息,并用变量response接收 。
打印下response的信息:
print(response)
如果正确,会得到:
<Response [200]>进程已结束,退出代码 0
其中,200表示状态码
常见的状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
我要获取的是页面信息,那我应该输出什么呢?
有两种方式:
print(response.content)
print(response.text)
response.content是直接从网页上抓取的数据,没有任何解码
response.text是对response.content进行解码的字符串,但是可能会出现乱码的情况,此时我们可以通过设置字符编码的方式纠正:
response.encoding = response.apparent_encoding
response.encoding设置获取的响应数据的字符编码,
response.apparent_encoding自动获取响应数据的字符编码。
经过以上操作,我们便能获取基本正确的网页数据。
如果我们尝试爬取(www.baidu.com)的网页源代码,会发现输出的源代码与我右击—查看网页源代码的内容大相径庭,这是什么原因呢?
答:反爬机制
网络通信毕竟是交换信息的一个过程,我要从网站获取信息,必定是先传出信息给到网站,
若是有反爬机制的网站,审查你的信息后,就能判断是人为浏览,还是爬取数据。
而一般审查的,就是User—Agent信息:
因此我们直接复制上图User—Agent信息,用字典的数据形式设置headers:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
}
url = "https://www.baidu.com/"
response = requests.get(url, headers=headers)
response.encoding = response.apparent_encoding
print(response.text)
Step 4:Re的使用
最简单的re模块使用:
import repattern = '<a href="(.*?)" target=".*?" alt=".*?">'
re_result = re.findall(pattern, response.text)
用一个变量保存正则表达式字符串
使用findall函数筛选数据:re.findall(正则表达式,文本)
再用一个变量保存筛选的信息
常见元字符:
. 表示一个任意字符
{} 表示前一个字符出现多少次
[] 包含[]内的字符
[0-9a-zA-Z] 表示包含所有数字与所有英文字母
* 表示前一个字符出现0次或多次
+ 表示前一个字符出现1次或多次
? 表示前一个字符出现0次或1次
在* + ?后使用?表示匹配到最近的立即停止匹配
Step 5:os的使用
本案例中,我们只需使用os模块中的两个函数:
import osos.mkdir("站长素材-唯美意境")
os.chdir("站长素材-唯美意境")
os.mkdir表示创建文件夹
os.chdir表示进入文件夹
os.chdir("..")亦可表示返回上一级文件夹
Step 6:保存文件
f = open(fileName, "wb")
f.write(content)
f.close()
open打开文件,若文件不存在则在当前目录创建文件,需包含后缀名,参数(文件名,打开方式)
打开方式包含 只读r , 覆盖w ,追加a
b含义为以二进制形式写入文件。
Step 7:综合案例
目的:1.爬取站长素材中唯美意境图片
2.用户自行输入要保存几页图片
3.创建对应文件夹并保存图片,要求有各自的图片名称
分析:1.爬取需要requests,re包,创建文件夹需要os包
2.爬取唯美意境图片网页中所有高清大图对应的网址
3.进入高清大图网址爬取图片地址与图片名称并下载保存
4.展示动态化保存过程
代码展示:
import re
import os
import requests# 创建保存图片文件夹
os.mkdir("站长素材-唯美意境")
os.chdir("站长素材-唯美意境")# 统计任务总量
pic_count = 1
page_count = 1# 手动输入爬取图片页数
page_num = int(input("请输入下载的页数:"))
for page in range(page_num):# 创建二级保存图片文件夹os.mkdir("page%s" % (page + 1))os.chdir("page%s" % (page + 1))# 分页数改变网页URLif page == 0:html_url = "https://sc.chinaz.com/tupian/weimeiyijingtupian.html"else:html_url = "https://sc.chinaz.com/tupian/weimeiyijingtupian_%s.html" % (page + 1)# 获取网页相应数据response = requests.get(html_url)response.encoding = response.apparent_encoding# 正则表达式筛选图片下级地址pattern = '<a href="(.*?)" target=".*?" alt=".*?">'re_result = re.findall(pattern, response.text)# 循环依次进入图片下级地址for url in re_result:# 拼接得到新的图片下级地址url = "http:" + url# 获取下级网页相应数据response = requests.get(url)response.encoding = response.apparent_encoding# 正则表达式筛选图片高清地址与标题pattern = '<a href="(.*?)" title="(.*?)" class=".*?">'pic_re_result = re.findall(pattern, response.text)img_url = "http:" + pic_re_result[0][0]img_title = pic_re_result[0][1]print(img_url, img_title, "共%s/%s张 %s/%s页" % (pic_count, len(re_result), page_count, page_num))# 保存图片response = requests.get(img_url)f = open(img_title + ".jpg", "wb")f.write(response.content)f.close()# 计数统计pic_count += 1# 重置图片计数统计,增加页数统计pic_count = 1page_count += 1# 返回上级目录,进入新的目录os.chdir("..")
print("任务完成!")
结果展示:
【Python】学习笔记 #1 —— 爬取网页筛选数据全过程相关推荐
- Python学习笔记:爬取网页图片
Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...
- Python学习笔记之爬取网页保存到本地文件
爬虫的操作步骤: 爬虫三步走 爬虫第一步:使用requests获得数据: (request库需要提前安装,通过pip方式,参考之前的博文) 1.导入requests 2.使用requests.get ...
- python pd.read_html 快速爬取网页表格数据与常规请求解析方式对比
为爬取网页表格数据,较容想到的常规方式是通过requests请求以及lxml解析定位获取元素,此外还可以通过pandas库的read_html直接获取表格数据,得到的将是目标网页所有table表格的l ...
- Python学习笔记,爬取笔趣阁小说
学习了基础的语法,然后网上看到有人分享利用python爬取小说,自己拷贝了代码尝试了一下. 1. 环境准备 安装 BeautifulSoup4 和 lxml & C:/Python39/pyt ...
- python学习笔记爬虫——爬取智联招聘信息
目的:自己输入指定地方,指定职业,起始页数,程序会自动打印页面的所有信息. 实现过程:这次程序的代码跟以往的都不一样,这次也是我第一次使用面向对象式编程,并且并不是分析网页代码,分析json字符串得到 ...
- python爬虫表格table_Python基于pandas爬取网页表格数据
以网页表格为例:https://www.kuaidaili.com/free/ 该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不 ...
- python 爬虫 表格,python爬虫爬取网页表格数据
用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...
- Python爬虫:Xpath爬取网页信息(附代码)
Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...
- python爬取网页代码-python爬虫爬取网页所有数据详细教程
Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...
最新文章
- 9 岁自学编程、24 岁身价涨至数百万美元,与微软一较高低的大佬多厉害?
- python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
- oracle 中增加行,Oracle中实现FORM表单插入、锁定、更新行、删除行的包
- 如何将本地代码推送至远程仓库
- 学习使用资源文件[6] - 菜单资源
- 【报告分享】新零售专题报告:从直播电商的春秋战国,看mcn的进阶之道.pdf
- python自动化办公演示视频-Python自动化办公培训视频教程 百度云网盘
- [转]人像识别是个伪命题
- 文件与文件系统的压缩与打包
- Android Studio新建项目
- python编程火车票_100行Python代码自动抢火车票!
- c/c++静态变量和静态函数
- Excel文件显示“文件已损坏,无法打开”情况的解决办法
- 0328 - 一日三更
- 【Multisim仿真】二阶有源高通滤波电路仿真
- jenkins 中无Dingding plugin钉钉插件,及其钉钉发送消息
- linux双屏鼠标移,ubuntu如何实现双屏显示
- 中秋节快乐 | 9月21日 星期二 | 天舟三号货运飞船发射成功;理想汽车下调第三季度交付量预期;凯德集团业务重组完成...
- 将数组转为xml格式
- 为什么20M网速看视频不卡,玩游戏卡?
热门文章
- 1709 ltsb 内存占用_腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制
- c语言中int作用,c语言中int的用法(5页)-原创力文档
- 如何读取照片的GPS信息?—最好的语言Java实现起来就这么简单【手把手教程+完整代码】
- ERROR: cannot launch node of type [map_server/map_server]: can't locate node [map_server] in package
- 当我去了不到 20 人的 IT 公司后。。。
- SQL学习笔记——Select查询语句
- Python爬虫入门实战之猫眼电影数据抓取(理论篇)
- 甘肃民勤农妇戈壁滩建“花花世界” 叩开致富之门
- Kali网络渗透--UDP攻击--Hping3
- CSR8670 spi方式软件烧录方法