目录

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 —— 爬取网页筛选数据全过程相关推荐

  1. Python学习笔记:爬取网页图片

    Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...

  2. Python学习笔记之爬取网页保存到本地文件

     爬虫的操作步骤: 爬虫三步走 爬虫第一步:使用requests获得数据: (request库需要提前安装,通过pip方式,参考之前的博文) 1.导入requests 2.使用requests.get ...

  3. python pd.read_html 快速爬取网页表格数据与常规请求解析方式对比

    为爬取网页表格数据,较容想到的常规方式是通过requests请求以及lxml解析定位获取元素,此外还可以通过pandas库的read_html直接获取表格数据,得到的将是目标网页所有table表格的l ...

  4. Python学习笔记,爬取笔趣阁小说

    学习了基础的语法,然后网上看到有人分享利用python爬取小说,自己拷贝了代码尝试了一下. 1. 环境准备 安装 BeautifulSoup4 和 lxml & C:/Python39/pyt ...

  5. python学习笔记爬虫——爬取智联招聘信息

    目的:自己输入指定地方,指定职业,起始页数,程序会自动打印页面的所有信息. 实现过程:这次程序的代码跟以往的都不一样,这次也是我第一次使用面向对象式编程,并且并不是分析网页代码,分析json字符串得到 ...

  6. python爬虫表格table_Python基于pandas爬取网页表格数据

    以网页表格为例:https://www.kuaidaili.com/free/ 该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不 ...

  7. python 爬虫 表格,python爬虫爬取网页表格数据

    用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...

  8. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  9. python爬取网页代码-python爬虫爬取网页所有数据详细教程

    Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...

最新文章

  1. 9 岁自学编程、24 岁身价涨至数百万美元,与微软一较高低的大佬多厉害?
  2. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
  3. oracle 中增加行,Oracle中实现FORM表单插入、锁定、更新行、删除行的包
  4. 如何将本地代码推送至远程仓库
  5. 学习使用资源文件[6] - 菜单资源
  6. 【报告分享】新零售专题报告:从直播电商的春秋战国,看mcn的进阶之道.pdf
  7. python自动化办公演示视频-Python自动化办公培训视频教程 百度云网盘
  8. [转]人像识别是个伪命题
  9. 文件与文件系统的压缩与打包
  10. Android Studio新建项目
  11. python编程火车票_100行Python代码自动抢火车票!
  12. c/c++静态变量和静态函数
  13. Excel文件显示“文件已损坏,无法打开”情况的解决办法
  14. 0328 - 一日三更
  15. 【Multisim仿真】二阶有源高通滤波电路仿真
  16. jenkins 中无Dingding plugin钉钉插件,及其钉钉发送消息
  17. linux双屏鼠标移,ubuntu如何实现双屏显示
  18. 中秋节快乐 | 9月21日 星期二 | 天舟三号货运飞船发射成功;理想汽车下调第三季度交付量预期;凯德集团业务重组完成...
  19. 将数组转为xml格式
  20. 为什么20M网速看视频不卡,玩游戏卡?

热门文章

  1. 1709 ltsb 内存占用_腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制
  2. c语言中int作用,c语言中int的用法(5页)-原创力文档
  3. 如何读取照片的GPS信息?—最好的语言Java实现起来就这么简单【手把手教程+完整代码】
  4. ERROR: cannot launch node of type [map_server/map_server]: can't locate node [map_server] in package
  5. 当我去了不到 20 人的 IT 公司后。。。
  6. SQL学习笔记——Select查询语句
  7. Python爬虫入门实战之猫眼电影数据抓取(理论篇)
  8. 甘肃民勤农妇戈壁滩建“花花世界” 叩开致富之门
  9. Kali网络渗透--UDP攻击--Hping3
  10. CSR8670 spi方式软件烧录方法