介绍

本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容。

为了知道POST方法所需要传递的HTTP请求头部和请求体,我们可以使用Fiddler来进行抓包,抓取上网过程中HTTP请求中的POST方法。为了验证Fiddler抓取到的POST请求,可以使用Postman进行测试验证。在Postman中完成测试后,我们就可以用Python的request.POST()方法来写我们的爬虫了。

流程

作为上述过程的一个演示,我们使用的网址为: http://country.911cha.com/ , 页面如下:

在表单中输入德国,跳转后的页面如下:

我们可以发现,在搜索的结果中,会出现德国这个搜索结果。点击该搜索结果,跳转后的页面如下:

在这个页面中有我们需要的德国的国旗。但是,怎么知道该网页的具体网址呢?换句话说,就是怎样得到http://country.911cha.com/GER.html ?别担心,在刚才出来的德国这个搜索结果中,我们查看其源代码,不难发现,在HTML源代码中,有我们想要的东西:

在源代码中我们能看到“GER.html”,这就意味着,只要得到搜索的结果,我们可以分析HTML源码来得到这个搜索结果的连接网址,然后在该连接网址中获取该国的国旗。所以,在这个爬虫中,最困难的地方在于,如何获取搜索结果?即,得到提交表单后的结果,也就是POST方法提交后的响应结果。我们利用Fiddler来抓取该POST方法。

我们打开Fiddler, 同时重复上面的操作,可以得到该过程的HTTP请求,如下图:

Fiddler帮助我们找到了刚才提交表单过程中的一个POST请求,具体分析该POST请求,其请求头部如下:

其请求体如下:

为了验证Fiddler抓取的POST请求,我们需要要Postman来进行测试。在用Postman进行测试前,我们需要问:是否所有请求头部中的数据都需要呢?答案是否定的,实际上,我们只需要User-Agent和Content-Type即可。在Postman中,先输入请求头部,如下:

再输入请求体,如下:

点击”SEND”按钮,得到响应后的结果,如下:

OK,这样我们就完成了Postman的测试。

爬虫

于是,借助这些信息来完成request.post()的提交,同时,借助BeautifulSoup来解析网页,得到国家的国旗下载地址并完成下载。具体的Python代码如下:# -*- coding: utf-8 -*-import urllib.requestimport requestsfrom bs4 import BeautifulSoup# 函数:下载指定国家的国旗# 参数: country: 国家def download_flag(country): # 请求头部 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', } # POST数据 data = {'q': country} # 网址 url = 'http://country.911cha.com/' # 提交POST请求 r = requests.post(url=url, data=data, headers=headers) # 利用BeautifulSoup解析网页 content = BeautifulSoup(r.text, 'lxml') # 得到搜索结果(国家)所在网页地址 country = content.find_all('div', class_='mcon')[1]('ul')[0]('li')[0]('a')[0] link = country['href'] #利用GET方法得到搜索国家的网页 r2 = requests.get(url='%s/%s'%(url, link)) # 利用BeautifulSoup解析网页 content = BeautifulSoup(r2.text, 'lxml') # 获取网页中的图片 images = content.find_all('img') # 获取指定国家的国旗名称及下载地址 for image in images: if 'alt' in image.attrs: if '国旗' in image['alt']: name = image['alt'].replace('国旗', '') link = image['src'] # 下载国旗图片 urllib.request.urlretrieve('%s/%s'%(url, link), 'E://flag/%s.gif'%name)def main(): # countries.txt储存各个国家的名称 file = 'E://flag/countries.txt' with open(file, 'r') as f: counties = [_.strip() for _ in f.readlines()] # 遍历各个国家,下载国旗 for country in counties: try: download_flag(country) print('%s国旗下载成功!'%country) except: print('%s国旗下载失败~'%country)main()

其中countries.txt的部分内容如下:

运行上述Python代码,我们发现在E盘的flag文件夹下,已经下载了各个国家的国旗,如下:

这样我们就完成了本次爬虫的任务!

总结

本次爬虫利用Python的requests模块的POST方法,来模拟网页中的表单提交。为了得到表单提交过程中的HTTP请求,即请求头部和请求体,我们利用了抓包工具Fiddler,而Postman的作用是为了帮助我们验证Fiddler抓取的POST请求是否正是我们需要的POST请求,同时也能验证请求头部及请求体。

虽然整个爬虫的过程写的不免麻烦,但是操作的思路应该是清晰的,再说,熟能生巧,多用几次,也就能熟悉整个流程了。本次爬虫只是作为整个流程的一个简单展示,读者可以在此基础上,去实现更为复杂的爬虫,希望本次的分享能够帮助到读者。谢谢大家能读到这儿,也欢迎大家交流~~

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

python怎么爬取Linux作业,Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗...相关推荐

  1. Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗

    介绍   本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容.   为了知道POST方法所需要传 ...

  2. python爬取网页内容requests_[转][实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  3. python爬取cctalk视频_python爬虫urllib使用和进阶 | Python爬虫实战二

    python爬虫urllib使用和进阶 上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了. 其实爬虫就是浏览器,只不过它是一个特殊的浏览器.爬取网页就是通过HTTP协议访问相应的网 ...

  4. 爬虫 使用python+requests模块爬取12306网站的车次信息

    用requests模块,爬取12306的车次信息 先看代码 import re import requests import json a=requests.get('https://kyfw.123 ...

  5. 爬虫的基本知识第一个请求requests模块的基本使用

    文章目录 1.请求过程与网页基础 1.1 URL介绍 1.2 HTTP请求过程 1.3请求 1.4 响应 1.4 网页基础 2.第一个请求 2.1 爬虫工作流(复习) 2.2 第一个爬虫 3.requ ...

  6. 爬虫学习笔记(第二章)requests模块

    文章目录 前言 第二章 request模块 简介 实战编码 ①爬取搜狗首页的页面数据 实战巩固 ②网页采集器 UA ③破解百度翻译 ④豆瓣电影爬取 ⑤肯德基餐厅位置爬取 ⑥药监总局相关数据爬取 前言 ...

  7. python动态爬取知乎_python爬虫从小白到高手 Day2 动态页面的爬取

    今天我们说说动态页面的抓取,动态页面的概念不是说网页上的内容是活动的,而是刷新的内容由Ajax加载,页面的URL没有变化,具体概念问度娘. 就以男人都喜欢的美女街拍为例,对象为今日头条. chrome ...

  8. python爬虫爬取今日头条_Python爬虫实战入门五:获取JS动态内容—爬取今日头条...

    之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的. 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成 ...

  9. python翻页爬豆瓣影评_荐爬虫7_《隐秘的角落》豆瓣影评爬取及可视化分析

    本文源码:百度云 提取码 pra2 影评爬取 豆瓣网有限制,各种类型的评论只可以爬取220条,所以我爬取了好评.一般.差评各220条,共计630条.爬取维度为评论类型.点赞数.评分.发布日期.评论. ...

最新文章

  1. Typescript,Vue you enjoy it ?
  2. jQuery-图片上传裁剪插件--imgAreaSelect(分析一) 放大缩小
  3. 计算机实测声波和拍实验报告,course:platform
  4. [转]浅谈算法和数据结构: 八 平衡查找树之2-3树
  5. HTML5模板生成工具
  6. Hive 安装配置及下载地址
  7. Windows Ubuntu,软件推荐,小技巧总结,免费内网穿透方案
  8. link标签 rel=“ alternate“ 应用解析
  9. 精准测试白皮书2020版
  10. 014:针对mdk中STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决(转)
  11. Uva 11552 Fewest Flops
  12. IDEA提示“程序包xxx不存在“
  13. 使用alter table tabname ENGINE=InnoDB后占用的空间更大
  14. 沉睡者 - [短视频运营] 抖音推广的偏门玩法,给我们的启示
  15. Failed to decode downloaded font: URL 问题的两种可能性
  16. 另类资产管理公司PAG冲刺港股:拟估值400亿港元 黑石是股东
  17. Object类中的方法
  18. 攻防世界--MISC题之掀桌子
  19. 简单介绍如何制作.chm文件(以Java API文档为例)
  20. Java的发展史1995年问世

热门文章

  1. Docker快速上手
  2. IIS服务器配置https
  3. jquery php抽奖转盘,JQuery+PHP转盘抽奖程序源码下载
  4. c语言字符是英文还是中文,c语言中判断中文还是英文字符
  5. pixelXL 下载编译源代码刷机烧录记录
  6. recovery: ASCII cpio archive (SVR4 with no CRC)——cpio格式的recovery解压缩和重新打包的方法
  7. 查询Windows下的dll/exe所依赖的文件
  8. 《5.SDRAM和重定位relocate》
  9. ffmpeg每隔30帧抽取1帧画面
  10. 黎曼猜想证明了?Michael Atiyah的愚人节难道在9月吗……