Python爬虫—爬取某网站上面所有的世界港口信息数据

news/2024/5/10 2:12:29/文章来源:https://blog.csdn.net/qq_17486399/article/details/100259408

最近学习了一段时间的Python基础语法后,写了一个爬取世界港口数据的爬虫,并且保存到SQL Server 数据库。

前提

公司之前有个需求是想监控集装箱如果进出某个港口的时候能给出信息提示,并且与海运数据进行对接,达到集装箱从陆运—海运—陆运,整个过程动态监控的目的。

其中有个小的需求是集装箱经过某个港口的时候需要给出消息提醒,以通知先关箱主(货主)。这样就需要知道全世界所有的港口信息有哪些,区域定位信息等。这样利用我们集装箱定位设备+GIS空间地理信息分析就可以实现集装箱进出港口的分析。

爬取网站

http://gangkou.00cha.net

我这里选择的是按国家查询,这个是网站的第一层,选择某个国家后,我们进入第二层

这样就可以得到某个国家所有港口的列表,我们还需要进入第三层得到每个港口详细信息。

所以我们写爬虫的时候需要用三个循环才能得到具体的港口信息。

实现

第一步:我们获取第一层网页数据

#定义一个变量url,为需要爬取数据我网页网址
url = 'http://gangkou.00cha.net/'#获取这个网页的源代码,存放在req中,{}中为不同浏览器的不同User-Agent属性,针对不同浏览器可以自行百度
req = requests.get(url,{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'})
req.encoding = 'gb2312'
#生成一个Beautifulsoup对象,用以后边的查找工作
soup = BeautifulSoup(req.text,'lxml')#找到所有a标签中的内容并存放在xml这样一个类似于数组队列的对象中
xml = soup.find_all('a')
gj=[]
#查找国家港口的URL
for k in xml:if 'gj_' in k['href']:gj.append(k['href'])

我们将国家信息及每个国家港口后面对应的URL进行存储。

第二步:获取每个国家的港口列表

   urlgj='http://gangkou.00cha.net/'+l#获取这个网页的源代码,存放在req中,{}中为不同浏览器的不同User-Agent属性,针对不同浏览器可以自行百度reqgj = requests.get(urlgj,{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'})reqgj.encoding = 'gb2312'#生成一个Beautifulsoup对象,用以后边的查找工作soupgj = BeautifulSoup(reqgj.text,'lxml')#找到所有a标签中的内容并存放在xml这样一个类似于数组队列的对象中xmlgj = soupgj.find_all('a')

第三步:遍历这个国家的港口列表,获取每个港口的详细数据

  #查找国家港口的URLfor kgj in xmlgj:if 'gk_' in kgj['href']:urlgk='http://gangkou.00cha.net/'+kgj['href']reqgk = requests.get(urlgk,{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'})reqgk.encoding = 'gb2312'soupgk = BeautifulSoup(reqgk.text,'lxml')#keylatlon1=soupgk.find(key1)trarry=[]for tr in soupgk.find_all('tr'):tdarry=[]for td in tr.find_all('td'):text = td.text.replace('\u3000','').replace(' ',' ')tdarry.append(text)trarry.append(tdarry)keylonlat1='LatLng'#设置经纬度关键字1keylonlat2=");"#设置经纬度关键字2plonlata=reqgk.text.find(keylonlat1)#找出关键字1的位置plonlatt=reqgk.text.find(keylonlat2,plonlata)#找出关键字2的位置(从字1后面开始查找)lonlat=reqgk.text[plonlata:plonlatt+1]#得到关键字1与关键字2之间的内容(即想要的数据)lonlat= re.findall(r'[(](.*?)[)]', lonlat)introarry=[]for introduce in soupgk.find_all('div', class_='bei lh'):if '港口介绍' in introduce.text:introarry.append([introduce.text.replace( '\ufffd','').replace( '\xe6','').replace(' ',' ')])

最后导入pymssql库,进行数据保存到SQL Server里面

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_767628.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 搭建 个人博客网站wordpress

docker详细安装请见 https://yeasy.gitbooks.io/docker_practice/install/centos.html 安装环境:本来打算安装在已搭建好的centos6.3 使用(yum search 软件包)查找软件包 使用 root 权限登录 Centos,确保 sudo yum update更新到最新。 查看内核版本uname…

[web] 网站压力测试工具-ab工具

写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用…

电影管理网站-第一章 抓取

最近自己为了提升一下技术,写了一个简单的电影链接网站。主要分三部份: 第一个:网站 点击打开链接 第二个:后台管理 点击打开链接 账号:ag 密码:test123 第三个:抓取服务 本文重点介绍抓…

电影管理网站-第二章 API项目搭建

自WCF之后,现在主流的就是WebAPI,如果你还在用WCF来创建新的项目,那就看看WebAPI是否更好呢! 第一步 新建项目:Ohye.Film.API 添加控制器:FilmController using Ohye.Film.Application.Film; using Ohye.…

微信网站应用开发的详细流程和引导

微信作为强大的通讯工具和社交平台,已经成了手机必不可少的应用,因此很多网站选择把微信登录网站的功能,方便微信用户注册登录和使用网站,也就是所谓的微信扫码登录应用网站。(特别提示,网站应用适用于网站…

我的世界服务器广告网站,友情广告:来《我的世界》中国版一起创造世界!

原标题:友情广告:来《我的世界》中国版一起创造世界!我是陆大明,今天接了条友情广告。是我们网易另一款游戏:《我的世界》中国版!目前已经正式开启PCJava版不限号测试了。对于这款风靡全球的沙盒游戏&#…

半小时搭建电子商务网站--opencart

原文链接: http://codeshold.me/2017/01/opencart_installation.html 前言 朋友在亚马逊(美国)上开了一家网点且注册了自己的品牌,amazon需要品牌商提供自己的网站,于是乎朋友找到了我,并给了我一个品牌商网站的参考…

亿级流量电商详情页系统实战-2.大型电商网站的异步多级缓存构建+nginx数据本地化动态渲染的架构

1.架构图 大型电商网站的详情页架构一般是这样的核心思路,如下图: 2.两个关键点 缓存数据生产服务 缓存数据生产服务,一般会监听一个MQ。当有服务(如商品服务)数据发生变更,会发消息给MQ,此…

php自动上传图片,PHP实现网站上传图片自动加水印_php

以下为引用的内容:/*****************************************************参数说明:$max_file_size : 上传文件大小限制, 单位BYTE$destination_folder : 上传文件路径$watermark : 是否附加水印(1为加水印,其他为不加水印);使用说明:1. 将php.INI文件里面的"…

linux 搜索深度搜,打造国内最大知识搜索网站 解析深度搜搜索优势

近来,一个新型的知识搜索引擎深度搜(www.shendusou.com)引起了很多互联网用户的关注,原因在于其搜索内容的专业性和精准性能很好的满足各类搜索用户的不同需求。接下来,让我们以奶粉作为关键词一起看看深度搜的优势究竟在那里。一、不同板块分…

jav简单的个人博客网站代码_「免费」简单几步搭建个人博客网站!你确定不看看?...

序言个人博客相比大家都很熟悉,特别是做技术,搞研究的等等,各行各业的人都有各行各业不同风格不同用途的博客网站,在网站上面分享自己想分享的内容供其它人随时查看,但是现在各大云服务平台的建站需求都是收费的&#…

html5响应时效果,HTML5响应式网站给我们的生活带来哪些改变

原标题:HTML5响应式网站给我们的生活带来哪些改变正如我们所看到的一样,HTML5大潮正来势汹汹。互联互通的大时代下每个人都要参与其中。下面,蓝鸥带您看懂HTML5网站有哪些不同,又会给我们的生活带来哪些改变?HTML5响应式网站是HT…

织梦网站如何发布在ecs服务器上,ecs云服务器部署织梦网站

ecs云服务器部署织梦网站 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。华为云帮助中心,为用户提供产品简介、价格说明…

go分析和kegg分析_利用g:profiler基因注释网站进行GO注释分析

由于本人个人的一些原因,距离上次更新文章已经有很长时间了。在此向大家说一声抱歉。之前有关GO注释的文章里,有读者咨询,是否有批量查找基因GO注释的方法。本期,本人就给读者推荐一个非常实用的,完成基因GO批量注释的…

linux设置网站的错误页面,Linux宝塔面板怎么给网站单独设置404页面

许多网站管理员都使用宝塔面板,因为它易于使用且快速。 Ourboke联盟在使用过程中发现,在Linux系统下安装的宝塔面板网站的自定义404错误页面在上传后仍显示默认的404页面。Linux宝塔面板怎么给网站单独设置404页面如果云服务器放置多个网站,它…

SEO需要优化的HTML代码,SEO人员必须要懂html代码

原标题:SEO人员必须要懂html代码之前很多次听到有人说SEO的入行门槛很低,什么人都可以做,不需要什么基础。在本人看来,做SEO是需要有一定的html代码基础的,这是必备的。SEO涉及的方方面面有很多,范围很广&a…

一个漂亮的暗系色调网站主页,外表美观。

最近尝试了一下一个网站主页设计,主要部分都完成了 外表还算美观,简单容易上手。 废话不多说,先上效果图:首先初期布局大致是这样: 一个头部加一个尾部加主体内容(颜色为了方便大家辨认设置的)在…

Nginx网站服务与虚拟Web主机(域名、IP、端口)

文章目录一、Nginx概述1.什么是Lginx2.Nginx工作原理3.Nginx 的模块从功能上分为如下三类4.Nginx的模块从结构上分为核心模块、基础模块和第三方模块二、搭建Nginx虚拟Web主机1.搭建Nginx服务2.管理Nginx服务3.配置nginx的验证功能三、配置虚拟主机功能1.基于域名2.基于IP3.基于…

网站如何提速?让网站秒开

配置小鸟云服务器,如果选择的带宽比较小,比如1M,而网站页面很大,在打开网站时速度比较慢,怎么办? 在这里主要说一种提速方法: 1:升级带宽(推荐)&#xff0c…

服务器常见问题|新手建站云服务器到底该如何选购?

云服务器其实相当于一个服务器主机,其配置和物理结构远优与普通家用主机。云服务器有独立的IP,独立的操作系统,内存,带宽等,在功能与使用方法上也与服务器一模一样。你可以简单理解为,通过虚拟化技术实现的…