首页 开发编程 正文

php搜索引擎怎么做

揭秘企业应该怎么做网站?很多企业做了网站效果不理想,只有知道什么样的网站适合我们的企业,企业网站在整个企业的网络营销推广过程中?如果一个企业网站做得不好,企业做网络营销推广有三个基本环节?...

php搜索引擎怎么做,公司要做个网站?

5000字长文:揭秘企业应该怎么做网站?花多少钱做网站才不算被坑做个企业网站需要多少钱?

做互联网这一行10几年了,见惯了形形色色的开发公司和用户,很多企业做了网站效果不理想,感觉花了冤枉钱!其实现在从整个互联网上来看,做网站的价格非常透明,问题就在于我们要做一个什么样子的网站?什么样的网站才能满足企业的需要?建设网站的费用到底出在哪里?我们应该怎么选择建站公司?带着这几个问题,我们往下去了解一下。

一、我们要做一个什么样子的网站?只有知道什么样的网站适合我们的企业,我们才能不做无用功,保证网站能有效果。这里我说一下网站建设中常见的四种类型:

1.全定制开发网站:这种类型的网站,价格就很昂贵,这可是需要找专门的公司定制,提供源代码,价格更是可以达到三万元到上百万不等。

2.半定制开发网站:这种网站一般是用建站公司的系统,设计方面也能根据需求定制,费用相对便宜,10000元以内就能拿下。

3.模板网站:模板网站就是建站公司的自有模板去选,加上域名和服务器也就几千块钱,当然内容要迁就框架、同质化严重、没有源代码、不利于二次开发等这些也都是它的缺点。

4.模板自助建站:这种网站也是现在市面上最便宜的网站,,不管是功能还是设计都有现成的,只要有域名,提供文字,用SaaS工具就能搭建好网站,甚至不需要源代码,费用方面1000以内即可。但是如果是他们出现问题,比如服务器出现问题,就会造成大量的用户打不开他们的网站,而且没有源代码,就好像你是租用的他们的网站一样,自主权不够;这种就是saas模式下的平台带来的后患。

重点来了:企业网站对于我们企业来讲到底有什么用呢?企业网站在整个企业的网络营销推广过程中,是非常重要的一个环节。如果把我们做网络营销推广看成是盖一栋大楼,那网站就是这个大楼的地基。地基打不好,大楼就不可能盖得高,就算是盖起来了,很快就得灰飞烟灭了!说得严重点,如果一个企业网站做得不好,就不要开展网络营销推广,因为开展了也是浪费钱!

为什么这么说呢?

企业做网络营销推广有三个基本环节:首先建立一个网站,然后通过各种推广方式向网站引来流量,有了流量后,在通过客服或销售人员成交。在这三个环节中,推广环节主要是以引流量为主,但是流量来到的地方就是网站上,就算你推广上讲得再好再清楚,用户们85%以上依然会在百度上搜一下,大家可以换位思考一下:如果我们要找网上找产品,会不会这样去操作,如果我们搜不到网站或者打开网站后页面布局杂乱无章,想找的内容找不到,那就算是这家企业实力很强,你也会觉得他是一家皮包公司,不会选择和他合作。同样的,我们的客户也是一样的想法。

我们在网络上做营销推广,就是想发展更多的客户,而大部分客户都不可能来实地考察我们的企业。酒香也怕巷子深,而这个时候,一个页面布局合理,美观大气;功能齐全,营销能力强的网站就能让我们快速地向客户展示企业的实力,激发起客户合作的欲望,让客户愿意和我们更近一步的联系,让我们的客服或销售可以发挥能力达成用户成交。

综上所述,在这三个环节中,网站是承上启下的关键一环,他将推广环节带来的流量接住,然后在引导到成交环节。如果没有企业网站或者是网站做的有问题,用户浏览一下就直接关掉页面走人。那么即使你的推广费用花的再多,流量再精准,客服和销售的能力再强,都没用!只能白白浪费推广费用!

对于企业来说,一定要有适合自己的企业网站,要有一个不仅仅是能够展示企业的产品,信息的展示型网站,一定要有一个具备营销功能,能够帮助企业提高转化率,带来订单的网站。

二、那到底做一个什么样子的网站,才是企业最需要的呢?对于企业来讲,网站不仅仅是要能展现产品和企业信息的网站,展示企业信息只是网站的基础。一个具备营销性,能给企业带来转化率提升和订单量的网站才是企业最需要的。

那什么样子的网站才算是具备营销性呢?我根据自己十几年的从业经验,总结出了营销型网站要具备的5个要素:展示力、公信力、说服力、引导力和推广力。具备了这5个要素,你的网站的营销能力就大大增强,给企业带来的转化和订单也就源源不断,也适合企业长时间运营,时间越长,效果越好!

展示力:展示力的核心在于“展示”,这是网站最基本的功能,一些人认为只要把企业信息和产品展示出来就可以了,其实这是不完整的。除了这些以外,关键要展示两方面的内容:一是卖相,二是卖点。

公信力:公信力就是要让客户相信信任我们的企业,是让用户相信我们的好,让用户相信我们的产品,相信我们的品牌,相信我们的企业,相信我们的实力。从销售角度来说,卖的就是信任,没有信任就没有转化和订单。

说服力:展示力是为了让用户知道你的优势,公信力是为了让用户相信你所展示的优势,而用户了解你,相信你,却不一定会选择和你合作,或者说有一部分用户选择了你的同行,所以,我们要在展示力和公信力的基础进一步说服用户,让用户最终选择我们的产品或服务。通常,说服力的关键在于产品的详情页上。

引导力:如果网站页面的说服力足,那么转化率就会高,但是也不可能达到100%的转化率,比如,用户看了你的页面就是不咨询、不购买,怎么办?引导力就是解决这个问题,在页面中,使用带有引导力的功能,引导那些不主动咨询的用户主动咨询或者留下联系方式,让我们的工作人员主动联系他们。

推广力:推广力主要是指SEO,如果网站想在搜索引擎中有自然排名,那么网站的规划和建设阶段,就要符合SEO优化的标准和要求。我们公司很早就有自己的软件著作——智能优化网站管理系统。网站优化好,也能给我们的推广省掉很大一部分费用。

三、建设网站的费用到底出在哪里?1.域名:目前域名还是比较便宜的,只要你不挑选偏门、冷门域名,热门com型不过才几十块钱一年,cn型也是一样(域名是门牌号,在雷同及鱼龙混杂的互联网圈,一个简单易记的域名对企业的来说显然至关重要)。

申请域名并不困难,先要选择登录域名的注册网站,这肯定要选择靠谱的域名服务商,就比如阿里云的万网、就是不错的选择,这种大品牌就特别的安全可靠,并且不容易出现问题。然后搜索想要的域名,一定要选择适合自己的域名。之后就只需要付款了,一般来说是按年付费的。如图所示:阿里云域名申请页面。

2.服务器选择:服务器虽然有物理服务器和云服务器之分,但对比价格来说,还是云服务器性价比高,独立主机的话,一年就两三万,而云服务器就很难上万,并且按月付费,还能根据自己的需求随时升级或是降级,非常方便。企业网站一般一年的服务器费用1000元以内就可以搞定了。当然云服务器肯定也是选择知名品牌比较好,就比如阿里云、腾讯云、百度云以及华为云。图为阿里云云服务器以及轻量应用服务器的价格截图,大家可以了解下。

3.网站开发成本(人工成本)那我们从人工成本来分析一下做一个企业网站成本的计算方式。,做企业网站基本上从页面设计上来讲就是包含:首页、产品列表页。产品的详情页、 新闻资讯的列表页、新闻的内容页这就是五个页面了,剩下的就像联系我们、关于我们等等,加起来这大概要十个页面。这还只是pc端,也就说我们建设的电脑端就要有十个页面,同样来算呢,手机端是不是也要需要十个页面才能实现整个页面呢?那这就是二十个页面了。我们来计算一下,一个差不多一点的美工的一个月工资费用大概是一万元左右,按每个月上班22天计算,那一天的成本大概是四百多块钱。你做出这些个页面来,至少需要他五天时间左右,也就是说做这些页面的成本大概就要两千块钱左右,这是实际成本。图片做完,下一步工作就是切图,把网站设计里面的图片切成格式(这个过程大约需要1天的时间完成),做完这一步才可能再到第三步程序人员把整个网站的功能给构架出来(这个过程也需要大约5到7天的时间,而一个程序人员的工资比美工只高不低)。当然也有一些公司会有产品经理对整个页面的设计,那这又增加成本了。还不算给你把网站的内容和图片都给上传完。所以这样算下来的话,一个网站负责任地去做的话,它的实际成本应该在五千多元。那有的人可能就说了,你太黑了,那仿一个别人不就行了吗?那你想一下,全部仿制的网站基本上真的能正常地做事么?如果是仿制一部分,工作量减少三分之二,那也需要2000元左右的成本。但是这种的网站能不能用得长久呢?如果在这方面影响转化率的话,你多成交一个客户带来的利润就比你省的费用还多,但是他所能带来的转化率的提升不仅仅是多成交一个客户这么简单了!我相信所有做企业的老板都能算明白这个账。

所以说做一个有用的网站它的成本在当下是5000多元,包括做图、切图,然后是套程序。

另外做网站的一个关键点就是功能部分,刚才只是企业网站一些基础功能,如果你要做个商城呢,是不是它的页面就不一样了?

做一个商城页面,我们根据之前的经验来估算的话,普通的一个企业商城的页面,pc端应该有二十五个页面,加上手机端相当于有五十个页面。再加上产品详情页

你这样去计算,做一个商城的费用大概也能估算出来,小程序,APP都基本能估算出来,当然不同的网站在制作的时候,我们有不同的计算方式,比方说页面、开发周期、另外最重要的一点就是功能。很多功能的开发都是很耗费时间的。到时候根据工作量大小一估算,基本上价格就能有个心理的预期了。

4.网站备案:备案其实不用花钱,这方面只需要付出时间就能得到。一般的建站公司都给你免费做了。

5.网站上线:这方面比较好说,如果自己来做的话,那就只需要人力成本,即便是让建站公司做,也不用再另外收费。

四:我们应该选择什么样的建站公司?建站公司的选择上大家一定要谨慎,选择一个好的负责任的建站公司会让企业后期无忧。

1.看公司正规性(看公司的组织结构) 一家好的建站公司所具有的正规性是非常的强的,因此人们在选择的时候也需要去注意判断一下这一个公司是否正规,选择一个正规的公司对于每一个客户来讲都是具有极大的好处的。要想判断一个公司是否正规其实也是非常的简单的,可以去看一看这一家公司所具有的资质和证件是否齐全以及他们公司的组织架构的各个岗位是否齐全。一般来说一个企业的岗位架构齐全,分工明确,,那么这一家公司肯定是正规的,也是值得广大的客户们所选择的,这也是非常重要的一个方面。

2.看经验(看公司员工工作年限) 一家好的建站公司是具有很多的成功的经验的,一般来讲好的公司都帮助了很多的不同的客户完成了很多的网站制作的公司。因此在人们选择公司的时候,需要注意的一个方面是多去看看这一家公司的实际经验和案例以及在职员工的工作年限,一个员工在这家公司工作时间长,也能反应出这个企业的时间长,服务的客户多,毕竟如果这家建站公司没有业务,也就留不住人才。

3.看售后服务(看看他们的客户满意度) 在运营中,一个网站制作出来了之后是需要后续的维护和升级等各个方面的,只有把这些方面都做好了之后,才能够保证这一个网站的正常运营和使用。一家好的公司在这些后续的服务方面做得都是非常的好的,能够更好的满足人们的使用需求。这里大家可以结合员工的工作年限和他们客户的满意度来进行分析选择。客户满意度其实如果这家企业说的不满100%,我感觉最起码这家建站企业的诚信是没有问题的,毕竟没有人能做到让人100%满意。而诚信好,这家企业一定是上上之选。

4.看企业官网一家好的建站公司,他自己的企业官网肯定是做的没有问题,包括打开速度,页面设计等等。这一点也是我们选择建站公司时要考虑的一点。

重点来了:选择建站公司可以考虑建站公司的地域。现在互联网发达,我们买很多大宗商品都可以在网络上购买,所以大家选择网站建设公司的时候,并不一定要局限于本地的企业或者是大城市的企业。只要建站公司能满足以上四点要求,可以选择一些小城市的,因为技术人员方面,很多技术因为家庭因素都留在了当地,而且现在互联网发达,不管这个技术在哪,对于他的技术提升都没问题,而不同城市的薪资水平差异很大,比如,一个美工,在北上广深这样的城市可能最低都要12000元起步,而小城市6000元也能达到他们一样的水平。这里也让整个建站公司的成本下降很多,相应的报价也会少很多。而且每个城市的物价不同,办公成本也不同,所以价格肯定也会有差异;所以选择一些小城市的公司也是一个很不错的选择。

在网站建设过程中,一定要注意的几点:1、网站打开速度要快。如果打开速度像蜗牛一样,那是没有任何意义的。虚拟空间(主机、服务器)的配置决定了网站打开的速度,就像我们的电脑配置越好,那么上网的速度也会越快!

2、网站要有PC端+移动端。因为现在移动互联网飞速发展,使用手机访问网站的用户越来越多,所以我们需要优化移动端的浏览体验,同时要兼顾PC端的界面友好度。

3、要有很好的SEO功能。有了网站,没有流量,那做这个网站的意义在哪里呢?如果网站具备很好的SEO功能,并且做了相应的优化,使得业务相关的关键词在百度等搜索引擎获得了好的排名的话, 那么你的网站就会有很多的精准客户了解并咨询。也能在后期网络推广中为你省掉很多费用,省掉的费用足够你建设好几个企业网站了。

4、一定要具备营销功能。网站是企业网络推广中承上启下的关键一环,他将推广环节带来的流量接住,然后在引导到成交环节。如果是网站做的有问题,用户浏览一下就直接关掉页面走人。那么即使你的推广费用花的再多,流量在精准,客服和销售的能力再强,都没用!只能白白浪费推广费用!

企业做网站一定要通盘考虑,整体规划,同时一定要考虑你的目标客户群,这样做出来的网站才能提高你的转化率和订单。而且选择好建站公司,让企业的互联网营销推广的基石稳若磐石。希望每家企业都能有一个适合自己企业的网站,在网络营销推广中提升企业的宣传效果,带来源源不断的利润。

相逢就是有缘,请大家多多点赞支持!你的支持,就是我创作的动力!后期有新的思路,我会继续更新!大家有不清楚的问题,也可以私聊!

用爬虫技术能做到哪些有趣的事情?

看到这个问题必须来怒答一波~用python爬虫爬便宜机票了解一下?

喜欢旅行又怕吃土?让Python来爬取最便宜机票吧!

图源:

videoblocks.com

你喜欢旅行吗?

这个问题通常会得到一个肯定的答案,随后引出一两个有关之前冒险经历的故事。大多数人都认为旅行是体验新文化和开阔视野的好方法。但如果问题是“你喜欢搜索机票的过程吗?”也许话题就到此为止了……

可事实上,便宜的机票往往也很重要!本文将尝试构建一个网络爬虫,该爬虫对特定目的地运行并执行带有浮动日期(首选日期前后最多三天)的航班价格搜索。它会将结果保存为excel文件并发送一封包含快速统计信息的电子邮件。显然,这个爬虫的目的就是帮助我们找到最优惠的价格!

你可以在服务器上运行脚本(一个简单的Raspberry Pi就可以),每天运行一到两次。结果会以邮件形式发送,建议将excel文件存入Dropbox文件夹,以便随时随地查看。

因为爬虫以“浮动日期”进行搜索,所以它会搜索首选日期前后最多三天的航班信息。尽管该脚本一次仅运行一对目的地,但可以很容易地改写该爬虫使其每个循环运行多个目的地。最终甚至可能找到一些错误票价...那会很有意思!

另一个爬虫

某种意义上来讲,网络爬取是互联网“工作”的核心。

也许你认为这是一个十分大胆的说法,但谷歌就是从拉里·佩奇用Java和Python构建的网络爬虫开始的。爬虫不断地爬取信息,整个互联网都在试图为所有问题提供最佳的可能答案。网络爬取有不计其数的应用程序,即使更喜欢数据科学中的其他分支,你仍需要一些爬取技巧以获得数据。

这里用到的一些技术来自于最近新的一本佳作《Python网络数据采集》,书中包含与网络爬取相关的所有内容,并提供了大量简例和实例。甚至有一个特别有意思的章节,讲述如何解决验证码检验的问题。

Python的拯救

第一个挑战就是选择爬取信息的平台,本文选择了客涯(Kayak)。我们试过了Momondo, 天巡(Skyscanner), 亿客行(Expedia)和其它一些网站,但是这些网站上的验证码特别变态。

在那些“你是人类吗?”的验证中,尝试了多次选择交通灯、十字路口和自行车后,客涯似乎是最好的选择,尽管短时间内加载太多页面它会跳出安全检查。

我们设法让机器人每4到6个小时查询一次网站,结果一切正常。虽然说不定哪个部分偶尔会出点小问题,但是如果收到验证码,既可以手动解决问题后启动机器人,也可以等待几小时后的自动重启。

如果你是网络爬取新手,或者不知道为何有些网站花费很大力气阻止网络爬取,那么为构建爬虫写下第一行代码前,你一定要多加努力。

谷歌的“网络爬取规范”:

http://lmgtfy.com/?q=web+scraping+etiquette

系紧安全带...

导入并打开Chrome浏览器标签页后,会定义一些循环中会用到的函数。这个架构的构思大概是这样的:

· 一个函数用于启动机器人程序,表明想要搜索的城市和日期。

· 这个函数获得首轮搜索结果,按“最佳”航班排序,然后点击“加载更多结果”。

· 另一个函数会爬取整个页面,并返回一个dataframe数据表。

· 随后重复步骤2和步骤3,得出按“价格”和“航行时间”排序的结果。

· 发送一封简要总结价格(最低价和平均价)的邮件,并将带有这三种排序类型的dataframe数据表保存为一份excel文件。

· 以上所有步骤会在循环中重复,每X小时运行一次。

每个Selenium项目都以一个网页驱动器开始。我们使用Chromedriver驱动器,但还有其它选择。PhantomJS和Firefox也很受欢迎。下载Chromedriver后,将其置于一个文件夹中即可。第一行代码会打开一个空白Chrome标签页。

from time import sleep, strftime

from random import randint

import pandas as pd

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import smtplib

from email.mime.multipart import MIMEMultipart

# Change this to your own chromedriver path!

chromedriver_path = 'C:/{YOUR PATH HERE}/chromedriver_win32/chromedriver.exe'

driver = webdriver.Chrome(executable_path=chromedriver_path) # This will open the Chrome window

sleep(2)

这些是将用于整个项目的包。使用randint函数令机器人在每次搜索之间随机睡眠几秒钟。这对任何一个机器人来说都是必要属性。如果运行前面的代码,应该打开一个Chrome浏览器窗口,机器人会在其中导航。

一起来做一个快速测试:在另一个窗口上访问客涯网(http://kayak.com),选择往返城市和日期。选择日期时,确保选择的是“+-3天”。由于在编写代码时考虑到了结果页面,所以如果只想搜索特定日期,很可能需要做一些微小的调整。

点击搜索按钮在地址栏获取链接。它应该类似于下面所使用的链接,将变量kayak定义为url,并从网页驱动器执行get方法,搜索结果就会出现。

无论何时,只要在几分钟内使用get命令超过两到三次,就会出现验证码。实际上可以自己解决验证码,并在下一次验证出现时继续进行想要的测试。从测试来看,第一次搜索似乎一直没有问题,所以如果想运行这份代码,并让它在较长的时间间隔后运行,必须解决这个难题。你并不需要十分钟就更新一次这些价格,对吧?

每个XPath都有陷阱

到目前为止,已经打开了一个窗口,获取了一个网站。为了开始获取价格和其他信息,需要使用XPath或CSS选择器,我们选择了XPath。使用XPath导航网页可能会令人感到困惑,即使使用从inspector视图中直接使用“复制XPath”,但这不是获得所需元素的最佳方法。有时通过“复制XPath”这个方法获得的链接过于针对特定对象,以至于很快就失效了。《Python网络数据采集》一书很好地解释了使用XPath和CSS选择器导航的基础知识。

接下来,用Python选择最便宜的结果。上面代码中的红色文本是XPath选择器,在网页上任意一处右键单击选择“inspect”就可以看到它。在想要查看代码的位置,可以再次右键单击选择“inspect”。

为说明之前所观察到的从“inspector”复制路径的缺陷,请参考以下差异:

1 # This is what the copymethod would return. Right click highlighted rows on the right side and select “copy> Copy XPath”//*[@id=“wtKI-price_aTab”]/div[1]/div/div/div[1]/div/span/span

2 # This is what I used todefine the “Cheapest” buttoncheap_results= ‘//a[@data-code = “price”]’

第二种方法的简洁性清晰可见。它搜索具有data-code等于price属性的元素a。第一种方法查找id等于wtKI-price_aTab的元素,并遵循第一个div元素和另外四个div和两个span。这次……会成功的。现在就可以告诉你,id元素会在下次加载页面时更改。每次页面一加载,字母wtKI会动态改变,所以只要页面重新加载,代码就会失效。花些时间阅读XPath,保证你会有收获。

不过,使用复制的方法在不那么“复杂”的网站上工作,也是很好的!

基于以上所展示的内容,如果想在一个列表中以几个字符串的形式获得所有搜索结果该怎么办呢?其实很简单。每个结果都在一个对象中,这个对象的类是“resultWrapper”。获取所有结果可以通过像下面这样的for循环语句来实现。如果你能理解这一部分,应该可以理解接下来的大部分代码。它基本上指向想要的结果(结果包装器),使用某种方式(XPath)获得文本,并将其放置在可读对象中(首先使用flight_containers,然后使用flight_list)。

前三行已展示在图中,并且可以清楚地看到所需的内容,但是有获得信息的更优选择,需要逐一爬取每个元素。

准备起飞吧!

最容易编写的函数就是加载更多结果的函数,所以代码由此开始。为了在不触发安全验证的前提下最大化所获取的航班数量,每次页面显示后,单击“加载更多结果”。唯一的新内容就是所添加的try语句,因为有时按钮加载会出错。如果它对你也有用,只需在前面展示的start_kayak函数中进行简要注释。

# Load more results to maximize the scraping

def load_more():

try:

more_results = '//a[@class = “moreButton”]'

driver.find_element_by_xpath(more_results).click()

# Printing these notes during the program helps me quickly check what it is doing

print('sleeping…..')

sleep(randint(45,60))

except:

pass

现在,经过这么长的介绍,已经准备好定义实际爬取页面的函数。

我们编译了下一个函数page_scrape中的大部分元素。有时这些元素会返回列表插入去程信息和返程信息之间。这里使用了一个简单的办法分开它们,比如在第一个 section_a_list和section_b_list变量中,该函数还返回一个flight_df数据表。所以可以分离在不同分类下得到的结果,之后再把它们合并起来。

def page_scrape():

“““This function takes care of the scraping part”““

xp_sections = '//*[@class=“section duration”]'

sections = driver.find_elements_by_xpath(xp_sections)

sections_list = [value.text for value in sections]

section_a_list = sections_list[::2] # This is to separate the two flights

section_b_list = sections_list[1::2] # This is to separate the two flights

# if you run into a reCaptcha, you might want to do something about it

# you will know there's a problem if the lists above are empty

# this if statement lets you exit the bot or do something else

# you can add a sleep here, to let you solve the captcha and continue scraping

# i'm using a SystemExit because i want to test everything from the start

if section_a_list == []:

raise SystemExit

# I'll use the letter A for the outbound flight and B for the inbound

a_duration = []

a_section_names = []

for n in section_a_list:

# Separate the time from the cities

a_section_names.append(''.join(n.split()[2:5]))

a_duration.append(''.join(n.split()[0:2]))

b_duration = []

b_section_names = []

for n in section_b_list:

# Separate the time from the cities

b_section_names.append(''.join(n.split()[2:5]))

b_duration.append(''.join(n.split()[0:2]))

xp_dates = '//div[@class=“section date”]'

dates = driver.find_elements_by_xpath(xp_dates)

dates_list = [value.text for value in dates]

a_date_list = dates_list[::2]

b_date_list = dates_list[1::2]

# Separating the weekday from the day

a_day = [value.split()[0] for value in a_date_list]

a_weekday = [value.split()[1] for value in a_date_list]

b_day = [value.split()[0] for value in b_date_list]

b_weekday = [value.split()[1] for value in b_date_list]

# getting the prices

xp_prices = '//a[@class=“booking-link”]/span[@class=“price option-text”]'

prices = driver.find_elements_by_xpath(xp_prices)

prices_list = [price.text.replace('$','') for price in prices if price.text != '']

prices_list = list(map(int, prices_list))

# the stops are a big list with one leg on the even index and second leg on odd index

xp_stops = '//div[@class=“section stops”]/div[1]'

stops = driver.find_elements_by_xpath(xp_stops)

stops_list = [stop.text[0].replace('n','0') for stop in stops]

a_stop_list = stops_list[::2]

b_stop_list = stops_list[1::2]

xp_stops_cities = '//div[@class=“section stops”]/div[2]'

stops_cities = driver.find_elements_by_xpath(xp_stops_cities)

stops_cities_list = [stop.text for stop in stops_cities]

a_stop_name_list = stops_cities_list[::2]

b_stop_name_list = stops_cities_list[1::2]

# this part gets me the airline company and the departure and arrival times, for both legs

xp_schedule = '//div[@class=“section times”]'

schedules = driver.find_elements_by_xpath(xp_schedule)

hours_list = []

carrier_list = []

for schedule in schedules:

hours_list.append(schedule.text.split('\n')[0])

carrier_list.append(schedule.text.split('\n')[1])

# split the hours and carriers, between a and b legs

a_hours = hours_list[::2]

a_carrier = carrier_list[1::2]

b_hours = hours_list[::2]

b_carrier = carrier_list[1::2]

cols = (['Out Day', 'Out Time', 'Out Weekday', 'Out Airline', 'Out Cities', 'Out Duration', 'Out Stops', 'Out Stop Cities',

'Return Day', 'Return Time', 'Return Weekday', 'Return Airline', 'Return Cities', 'Return Duration', 'Return Stops', 'Return Stop Cities',

'Price'])

flights_df = pd.DataFrame({'Out Day': a_day,

'Out Weekday': a_weekday,

'Out Duration': a_duration,

'Out Cities': a_section_names,

'Return Day': b_day,

'Return Weekday': b_weekday,

'Return Duration': b_duration,

'Return Cities': b_section_names,

'Out Stops': a_stop_list,

'Out Stop Cities': a_stop_name_list,

'Return Stops': b_stop_list,

'Return Stop Cities': b_stop_name_list,

'Out Time': a_hours,

'Out Airline': a_carrier,

'Return Time': b_hours,

'Return Airline': b_carrier,

'Price': prices_list})[cols]

flights_df['timestamp'] = strftime(“%Y%m%d-%H%M”) # so we can know when it was scraped

return flights_df

尽量让这些名字容易理解。记住变量a表示旅行的去程信息,变量b表示旅行的返程信息。接下来说说下一个函数。

等等,还有什么吗?

截至目前,已经有了一个能加载更多结果的函数和一个能爬取其他结果的函数。本可以在此结束这篇文章,而你可以自行手动使用这些函数,并在浏览的页面上使用爬取功能。但是前文提到给自己发送邮件和一些其他信息的内容,这都包含在接下来的函数start_kayak中。

它要求填入城市名和日期,并由此打开一个kayak字符串中的地址,该字符串直接跳转到“最佳”航班结果排序页面。第一次爬取后,可以获取价格的顶部矩阵,这个矩阵将用于计算平均值和最小值,之后和客涯(Kayak)的预测结果(页面左上角)一同发送到邮件中。这是单一日期搜索时可能导致错误的原因之一,因其不包含矩阵元素。

def start_kayak(city_from, city_to, date_start, date_end):

“““City codes it's the IATA codes!

Date format YYYY-MM-DD”““

kayak = ('https://www.kayak.com/flights/' + city_from + '-' + city_to +

'/' + date_start + '-flexible/' + date_end + '-flexible?sort=bestflight_a')

driver.get(kayak)

sleep(randint(8,10))

# sometimes a popup shows up, so we can use a try statement to check it and close

try:

xp_popup_close = '//button[contains(@id,”dialog-close”) and contains(@class,”Button-No-Standard-Style close “)]'

driver.find_elements_by_xpath(xp_popup_close)[5].click()

except Exception as e:

pass

sleep(randint(60,95))

print('loading more.....')

# load_more()

print('starting first scrape.....')

df_flights_best = page_scrape()

df_flights_best['sort'] = 'best'

sleep(randint(60,80))

# Let's also get the lowest prices from the matrix on top

matrix = driver.find_elements_by_xpath('//*[contains(@id,”FlexMatrixCell”)]')

matrix_prices = [price.text.replace('$','') for price in matrix]

matrix_prices = list(map(int, matrix_prices))

matrix_min = min(matrix_prices)

matrix_avg = sum(matrix_prices)/len(matrix_prices)

print('switching to cheapest results…..')

cheap_results = '//a[@data-code = “price”]'

driver.find_element_by_xpath(cheap_results).click()

sleep(randint(60,90))

print('loading more…..')

# load_more()

print('starting second scrape…..')

df_flights_cheap = page_scrape()

df_flights_cheap['sort'] = 'cheap'

sleep(randint(60,80))

print('switching to quickest results…..')

quick_results = '//a[@data-code = “duration”]'

driver.find_element_by_xpath(quick_results).click()

sleep(randint(60,90))

print('loading more…..')

# load_more()

print('starting third scrape…..')

df_flights_fast = page_scrape()

df_flights_fast['sort'] = 'fast'

sleep(randint(60,80))

# saving a new dataframe as an excel file. the name is custom made to your cities and dates

final_df = df_flights_cheap.append(df_flights_best).append(df_flights_fast)

final_df.to_excel('search_backups//{}_flights_{}-{}_from_{}_to_{}.xlsx'.format(strftime(“%Y%m%d-%H%M”),

city_from, city_to,

date_start, date_end), index=False)

print('saved df…..')

# We can keep track of what they predict and how it actually turns out!

xp_loading = '//div[contains(@id,”advice”)]'

loading = driver.find_element_by_xpath(xp_loading).text

xp_prediction = '//span[@class=“info-text”]'

prediction = driver.find_element_by_xpath(xp_prediction).text

print(loading+'\n'+prediction)

# sometimes we get this string in the loading variable, which will conflict with the email we send later

# just change it to “Not Sure” if it happens

weird = '¯\\_(ツ)_/¯'

if loading == weird:

loading = 'Not sure'

username = 'YOUREMAIL@hotmail.com'

password = 'YOUR PASSWORD'

server = smtplib.SMTP('smtp.outlook.com', 587)

server.ehlo()

server.starttls()

server.login(username, password)

msg = ('Subject: Flight Scraper\n\n\

Cheapest Flight: {}\nAverage Price: {}\n\nRecommendation: {}\n\nEnd of message'.format(matrix_min, matrix_avg, (loading+'\n'+prediction)))

message = MIMEMultipart()

message['From'] = 'YOUREMAIL@hotmail.com'

message['to'] = 'YOUROTHEREMAIL@domain.com'

server.sendmail('YOUREMAIL@hotmail.com', 'YOUROTHEREMAIL@domain.com', msg)

print('sent email…..')

虽然没有使用Gmail账户测试发送邮件,但是可以搜索到很多的替代方法,前文提到的那本书中也有其他方法来实现这一点。如果已有一个Hotmail账户,只要替换掉个人的详细信息,它就会开始工作了。

如果想探索脚本的某一部分正在做什么,可以将脚本复制下来并在函数外使用它。这是彻底理解它的唯一方法。

利用刚才创造的一切

在这些步骤之后,还可以想出一个简单的循环来使用刚创造的函数,同时使其持续运行。完成四个“花式”提示,写下城市和日期(输入)。因为测试时不想每次都输入这些变量,需要的时候可以使用以下这个清楚的方式进行替换。

如果已经做到了这一步,恭喜你!改进还有很多,比如与Twilio集成,发送文本消息而不是邮件。也可以使用VP*或更加难懂的方式同时从多个服务器上研究搜索结果。还有就是验证码的问题,验证码会时不时地跳出来,但对此类问题还是有解决办法的。不过,能走到这里已经是有很牢固的基础了,你可以尝试添加一些额外的要素。

使用脚本运行测试的示例

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

PHP怎么接私活?

(1)首先可以通过搜索一些私活的兼职的群

(2)去网上搜索一些众包的网站

(3)通过提高行业的影响力,然后身边的朋友帮你介绍

如何用Docker搭建自己的PHP开发环境?

用Docker搭建PHP开发环境,我这里简单说一下使用镜像搭建的步骤,使用镜像非常适合开发使用,方便快捷。以下每一步骤有不清楚的地方可以继续交流讨论:

第一步 安装Docker

这步安装网上有很多相关教程,不展开说了,分Windows和Mac的安装步骤,请自行查阅。

第二步 熟悉Docker的基本命令

1. docker info

查看已安装的docker基本信息,如版本号、镜像和容器数量等。

2. docker pull

拉取镜像到本地

3. docker run

使用拉取到本地的镜像文件创建并运行一个容器

4. docker ps [-a]

查看正在运行的容器状态,-a参数查看所有

5. docker images

查看镜像列表,列出本地所有的镜像

6. docker exec -ti [CONTAINER ID] /bin/bash

进入某个容器

7. docker restart

重启一个正在运行中的容器

8. docker kill

停止一个正在运行的容器

第三步 安装镜像

DockerHub的访问速度慢,用网易蜂巢的镜像比较好。首先,登录网易蜂巢(https://c.163yun.com/hub#),在镜像中心搜索LNMP或者LAMP的镜像,找到你需要的镜像。

第四步 运行和配置

执行docker run

docker run --name testlamp -p 80:80 -v /data:/data -d lamp:latest

命令说明:使用镜像lamp:latest以后台模式启动容器,将容器的80端口映射到宿主主机的80端口,宿主主机的目录/data映射到容器的/data目录。配置则根据自己的需要进入到容器进行配置。

建议

我的建议是PHP开发者能利用Docker快速把PHP开发环境搭建起来就可以了,对于开发者使用Docker的好处就是节省搭建环境的时间,统一开发环境标准,并且将开发环境容器化之后,不会干扰你的本地环境,可实现应用隔离,一次构建可多次交付的诉求。

欢迎在评论区发表自己不同的观点,共同探讨,共同提高!

如何优化wordpress博客站?

WordPress 在国内使用还是需要一定的优化的,但是这个优化是要根据使用的主题、插件来有针对性的优化的,一般 WordPress 默认除了一些国内没用的国外HTTP请求清除掉以外其实也没有啥可优化的。最大的麻烦是如果使用的是国外的主题和插件的话,那几乎优化起来有想打人的冲动,所以使用 WordPress 最好的建议是少用国外插件、主题甚至不用,首选国内的主题和插件为宜。

WordPress 其它的优化也就是外部 CDN 部署来优化纯静态文件的访问速度,内部减小 WordPress 对海外HTTP请求了,再有就是服务器层面的PHP运行效能优化比如开启OPCache扩展,MySQL数据库的优化( Memcached 、Redis)这些手段了!

至于说 WordPress 缓存插件,这个目前国内的主流云服务器几乎都没有这个必要了,缓存插件只能是在网站访问量很大、服务器承受能力有限这个情况下的临时手段来使用了!

归根结底, WordPress 优化要根据具体的情况来对待的,面对国内用户的话建议还是备案后选用国内服务器最好了!

一个十年草根博客站长【明月登楼的博客】(imydl.com)熟悉 WordPress 、 Typecho 博客平台创建、运营网站,多年VPS服务器运维经历,实践经验丰富,在这里为您解答专业方面的所有疑问!

本文转载自互联网,如有侵权,联系删除