【记录下第一次自己写的爬虫程序】

HIMCM2016的题目要求根据联邦快递的一日达地图设置仓库所在地,那肯定得先找到地图啊。在联邦快递http://www.fedex.com/grd/maps/ShowMapEntry.do网站上输入美国邮编(zip code),可以获取从该邮编所在地出发到其他地方所需的陆地运输时间。

如图所示,输入邮编84101,点击View Map
【美国邮编列表可以在http://www.geonames.org/postalcode-search.html?q=US&country=网站上获取】
粉红色的地方即为一日达覆盖范围,点击F12,分析页面代码结构,找到图片所在的标签
虽然URL没有跳转,但是可以从表单form的action可以看到本页面的实际链接为http://www.fedex.com/grd/maps/MapResult.do,因此就爬这个页面就行了
【因为不知道火狐中把表单的输入参数放在哪里了,这里把火狐换成了微软的浏览器】
可以在Payload中看到MapResult的表单参数,然后复制到python里面,设置get的params参数。
千万不要直接从HTML页面源代码看,有些表单参数看不出来。

    params= {'overnight': 'false','direction': 'outbound','originZip': zip,'mapType': '00','resType': '00',}

然后设置链接,表头等参数,这个网站一定一定要设置cookie,如果不设置cookie则会被看作第一次进去,会回到ShowEntry这个网页而不是MapResult,就获取不到图片了。在这里真的卡了很久…一直回到原页面

url = "http://www.fedex.com/grd/maps/MapResult.do"
cookie='MAPSSESSIONID=t61rkaQKN5G8Q5t5ceg...'#这里每个电脑的cookies不一样,这里省略一下
user_agent = user_agent_list[random.randint(0, len(user_agent_list) - 1)]#这里ua从ua列表里随机选择 常用UA列表可以从百度搜到
headers = {      'User-Agent': user_agent,'Referer': 'http://www.fedex.com/grd/maps/MapResult.do','Content-Type': 'application/x-www-form-urlencoded','cookie': cookie,'Host': 'www.fedex.com','Connection': 'close'}

然后正式开始发送请求爬虫,这里还要设置下try,FedEx会拒绝短时间内来自同一IP的大量请求,如果请求失败就休息5s,然后再试一次,第二次休息10s,如果还不行就加到失败的邮编列表里,之后再另外爬失败列表里面的。

    try:r = requests.get(url=url, params=params, headers=headers)except:print(zip + " Connection refused by the server..Let me sleep for 5 seconds")time.sleep(5)print("Was a nice sleep, now let me continue...")try:r = requests.get(url=url, params=params, headers=headers)except:print(zip + " Connection refused by the server again..Let me sleep for 10 seconds")time.sleep(10)try:r = requests.get(url=url, params=params, headers=headers)except:print(zip + " Connection failed")failed_zip.append(zip)time.sleep(10)return

拿到响应后,获取网页的图片链接,FedEx有很多邮编的图片都是重复的,重复的图片就不下载了。

    index = r.text.find('<img src="/templates/components/apps/wgsm/images/outbound/')index2 = r.text.find('" alt="" style="height:100%;width:100%">')url_ending = r.text[index+58:index2]if url_ending in pic_ache:return  #重复的图片 不要了pic_ache.append(url_ending)whole_url = "http://www.fedex.com/templates/components/apps/wgsm/images/outbound/" + url_endingtry:pic = requests.get(whole_url)except:print(zip + " Connection refused by the server..Let me sleep for 5 seconds")time.sleep(5)print("Was a nice sleep, now let me continue...")try:pic = requests.get(whole_url)except:print(zip + " Connection failed")failed_zip.append(zip)time.sleep(10)returnimage_file = io.BytesIO(pic.content)

读取图片,由于我们只要地图,因此把图片的分辨率重新设了(resize)一下,然后再裁剪(crop),进行保存,

    try:img = PIL.Image.open(image_file)except:print(zip+" error ")returnwidth, height = img.sizeimg = img.resize([int(width / 5), int(height / 5)])img = img.crop((280, 20, 1300, 690))#裁剪一下# img.show()img.save("images/" + zip + ".png")print(zip + ".png 下载成功")

这里crop好像和网上搜的用法不一样,img.crop((left,top,right,bottom))不是指距离左,上,右,下边界的距离,就是指裁剪图片的坐标范围。
比如img.crop((280,20,1300,690))就是指裁剪范围为横坐标为280-1300,y坐标是从20-690,处理好之后进行保存图片即可。
程序运行结果

最终结果:

【python爬虫】HIMCM2016 FedEx联邦快递的一日达地图相关推荐

  1. 读书笔记--Fedex联邦快递,使命必达的力量

    不计代价,使命必达是联邦快递人的服务理念,也是始终如一的宗旨.更是联邦快递服务的终极目标,联邦快递员工职业精神的综合体现,增强了联邦快递员工的使命感,激发联邦快递员工的激情和创造力,磨砺了联邦员工的执 ...

  2. Python网络爬虫(九)快递查询

    api:http://www.kuaidi100.com/ 单号的请求头Request URL为: 涉及了查询type及postid,返回的content 根据请求返回值(200表示查询成功,post ...

  3. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  4. 杂项-公司:联邦快递百科-un

    ylbtech-杂项-公司:联邦快递百科 联邦快递( FedEx)是一家国际性速递集团,提供隔夜快递.地面快递.重型货物运送.文件复印及物流服务,总部设于美国田纳西州,隶属于美国联邦快递集团(FedE ...

  5. 联邦快递就华为包裹被转运致歉 称有关货件正退回发货方

    在华为指出联邦快递转运华为包裹引发热议后,联邦快递(FedEx)发布声明,就华为包裹被转运致歉,称有关货件正退回发货方. 华为上周五对路透社表示,FedEx将从日本寄往华为中国地址的两个包裹转运至美国 ...

  6. 包裹遭联邦快递不正常“转运” 华为:将重新审视双方合作关系

    上周联邦快递还在官微辟谣,针对此前微博曝光"多个华为子公司反馈联邦快递未经华为许可,将华为交其承运的文件转送美国"的消息,做出回应称:与事实严重不符. 而现在,华为官方也加入&qu ...

  7. Python爬虫十六式 - 第三式:Requests的用法

    Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽   Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...

  8. python免费教学视频400集-如何入门 Python 爬虫?400集免费教程视频带你从0-1全面掌握...

    学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础: ...

  9. Python爬虫开发从入门到实战

    Python爬虫开发从入门到实战(微课版) 第1章 绪论 爬虫的主要目的是获取网页内容并解析.只要能达到这个目的,用什么方法都没有问题. 关于获取网页,本书主要介绍了Python的两个第三方模块,一个 ...

最新文章

  1. DB-MySQL:MySQL 事务
  2. elasticsearch 分片恢复经历了哪些步骤?
  3. android 中测量高度和宽度,android获得屏幕高度和宽度(display中getSize(Point)方法使用)...
  4. JS常用的设计模式(7)—— 外观模式
  5. MySQL数据库:触发器Trigger
  6. 环的寻找:寻找无向图中所有存在的环-删除点法
  7. CF786E-ALT【网络流,倍增】
  8. Pytorch 词嵌入word_embedding1初识
  9. MFCC里面的log energy和matlab实现
  10. 《电机学和电机驱动入门》
  11. 戴尔服务器怎么一键重装系统,dell笔记本重装系统步骤
  12. 自举电容充电回路分析
  13. 诺基亚Lumia920竞争力分析软件篇—三星ATIV S、GALAXY S3、HTC One X、iPhone 5对比
  14. 显卡,就是一个男人对自己的交待
  15. 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)
  16. 常用SEISMIC BINARY数据的读取
  17. 北京工作居住证办理流程
  18. python的数学建模库_数学建模库
  19. 2020年计算机科学与技术学校排名,2020年全国计算机科学与技术专业大学排名
  20. 特斯拉自动驾驶事故汇总笔记

热门文章

  1. 基于Python+Vue+Mysql实现(物联网)智能大棚【100010340】
  2. Mongodb在renameCollection之后,记得千万要立即补建索引.
  3. RocketMQ 在物流行业的应用与运维
  4. CVPR2020目标跟踪,共33篇
  5. 2022-1-22 牛客C++项目 —— alarm 函数
  6. 怎么样才能让外网的计算机访问一个局域网内的计算机?
  7. 2021-07-22虚拟内存(三)页表
  8. 关于Pandas replace 函数的使用
  9. 拿什么保护你---TDW数据安全
  10. 2021年东北大学842计算机考研经验分享(专业课138)