忙了一个周,恰好搞中秋活动,终于是有时间水文章了,今天来点不一样的,不玩逆向,来分享一下三种语言的网络爬虫,哈哈纯属个人分享。所谓技多不压身,感兴趣的小伙伴也可以去卷一卷。

作者感觉:

相对于三种语言,目前比较成熟的适合玩爬虫的还是得python,要说性能的还是python语言比较好,同一网络下,作者测试速度最快的还是JavaScript,相对有点差异的就是GO,JavaScript虽然兼容性很强,但是不适合来搞爬虫,当然这属于作者自己的看法,我也是今天闲的有点蛋疼,哈哈。

下面就以图片加代码的形式展示一下针对同一平台各个语言的爬虫流程:

按时间排个序

第一名:JavaScript ==>0.6s

 JavaScript参考代码:

var request = require('request');
const xpath = require('xpath')
const dom = require('xmldom').DOMParser
var headers = {'Connection': 'keep-alive','Accept': '*/*','X-Requested-With': 'XMLHttpRequest','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Origin': 'http://zjcs.yn.gov.cn','Referer': 'http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice','Accept-Language': 'zh-CN,zh;q=0.9','Cookie': 'JSESSIONID=0D9B46EC25EAEBD93FCDC314EF91A532; _gscu_802487706=54155365ki5qvy63; Hm_lvt_b9099e95d08017e30f6285a8b55eb822=1654155365; security_session_verify=197043d259f590973cb82fe37b0a88dd'
};
var dataString = 'listVo.projectName=&listVo.serviceType=&listVo.divisionCode=532300&purOrgCodePanel_selectname=&selectBox_purOrgCodePanel=&listVo.purOrgCode=&listVo.bidResultDateBegin=&listVo.bidResultDateEnd=&pageNumber=0&sourtType=&';
var options = {url: 'http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice/rest',method: 'POST',headers: headers,body: dataString
};
var date1=new Date();  //开始时间
request(options, callback);//发送请求
function Trim(str,is_global)//去掉字符串前后所有空格
{var result;result = str.replace(/(^\s+)|(\s+$)/g,"");if(is_global.toLowerCase()=="g") {result = result.replace(/\s/g,"");}return result;
}
function callback(error, response, body) {var html_data;var data_list=[];if (!error && response.statusCode == 200) {html_data=body}else{html_data=""}let xml = html_data;let doc = new dom().parseFromString(xml);var base_url= 'http://zjcs.yn.gov.cn'var tr_list=xpath.select('//table[@class="table table-hover table-bordered table-list"]//tr',doc);for (var tr=1;tr<tr_list.length;tr++) {var title_str = xpath.select('./td[2]/a//text()', tr_list[tr])var href_str=xpath.select('./td[2]/a/@href', tr_list[tr])var bid_time_str=xpath.select('./td[6]/text()', tr_list[tr])try {var title=Trim(title_str.toString(),"g").replace(',','')var href=base_url+Trim(href_str.toString(),"g").replace('href="','').replace('"','')var bid_time=bid_time_str.toString()var item ={}item['title']=titleitem['href']=hrefitem['bid_time']=bid_time}catch (e) {console.log("标签解析出错")}data_list.push(item)}console.log(data_list);var date2=new Date();    //结束时间console.log("endding_time:",parseFloat(date2-date1)/1000);return data_list
}

第二名:GO   ==>  1.6s

 GO语言参考代码:

package main
import ("fmt"htmlquery "github.com/antchfx/xquery/html""io/ioutil""log""net/http""regexp""strconv""strings""time"
)
func main() {start:=time.Now()client := &http.Client{}total_page:=get_total_page()fmt.Println("总页码:",total_page)for i:=0;i<1;i++{fmt.Println("第"+strconv.Itoa(i+1)+"次请求")post_request:=`listVo.projectName=&listVo.serviceType=&listVo.divisionCode=532300&purOrgCodePanel_selectname=&selectBox_purOrgCodePanel=&listVo.purOrgCode=&listVo.bidResultDateBegin=&listVo.bidResultDateEnd=&pageNumber=`+strconv.Itoa(i)+`&sourtType=&`//fmt.Println(post_request)var data = strings.NewReader(post_request)req, err := http.NewRequest("POST", "http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice/rest", data)if err != nil {log.Fatal(err)}req.Header.Set("X-Requested-With", "XMLHttpRequest")req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36")req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")req.Header.Set("Origin", "http://zjcs.yn.gov.cn")req.Header.Set("Referer", "http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice")req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")resp, err := client.Do(req)if err != nil {log.Fatal(err)}defer resp.Body.Close()bodyText, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}//fmt.Printf("%s\n", bodyText)//解析函数data_list:=parse(string(bodyText))fmt.Println(data_list)fmt.Println("总耗时:",time.Since(start))}
}
func get_total_page() int {client := &http.Client{}var data = strings.NewReader(`listVo.projectName=&listVo.serviceType=&listVo.divisionCode=532300&purOrgCodePanel_selectname=&selectBox_purOrgCodePanel=&listVo.purOrgCode=&listVo.bidResultDateBegin=&listVo.bidResultDateEnd=&pageNumber=1&sourtType=&`)req, err := http.NewRequest("POST", "http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice/rest", data)if err != nil {log.Fatal(err)}req.Header.Set("Connection", "keep-alive")req.Header.Set("Accept", "*/*")req.Header.Set("X-Requested-With", "XMLHttpRequest")req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36")req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")req.Header.Set("Origin", "http://zjcs.yn.gov.cn")req.Header.Set("Referer", "http://zjcs.yn.gov.cn/yns/cxz/bidResultNotice")req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")req.Header.Set("Cookie", "JSESSIONID=F1D78281958EE56DEDBC98B5AEEB5E6E; _gscu_802487706=54155365ki5qvy63; Hm_lvt_b9099e95d08017e30f6285a8b55eb822=1654155365; security_session_verify=4e95296e56b6f870f316ab54bf33e137")resp, err := client.Do(req)if err != nil {log.Fatal(err)}defer resp.Body.Close()bodyText, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}//fmt.Printf("%s\n", bodyText)total_pages, _ := regexp.Compile(`'resultPannel','(\d+)'`)  // 定义匹配规则total_page_List := total_pages.FindAllString(string(bodyText),-1) // 正则匹配//fmt.Println(total_page_List)rule_1,_:=regexp.Compile(`(\d+)`)  // 定义匹配规则//for a:=0;a<len(total_page_List);a++{//    value :=total_page_List[a]//   fmt.Println(rule_1.FindAllString(value,1))//}p:=rule_1.FindAllString(total_page_List[len(total_page_List)-1],1)int_page, err := strconv.Atoi(p[0])if err!=nil{fmt.Println("出错")}return int_page+1
}type BlogInfo struct {title stringhref stringbid_time string
}
func getReplace(str string)  string{// 去除空格str1 := strings.TrimSpace(str)// 去除换行符str2 := strings.Replace(str1, "\n", "", -1)return str2
}
func parse(html string) [10]any{// Parse htmlroot, _ := htmlquery.Parse(strings.NewReader(html))tr_list := htmlquery.Find(root, `//table[@class="table table-hover table-bordered table-list"]//tr`)[1:]blog := BlogInfo{}var list_data [10]anyvar i =0base_url:= `http://zjcs.yn.gov.cn`for _,tr := range  tr_list{title:=htmlquery.InnerText(htmlquery.Find(tr,`./td[2]/a/@href`)[0])blog.title=getReplace(title)bid_time:=htmlquery.InnerText(htmlquery.FindOne(tr,`./td[6]/text()`))blog.bid_time=bid_timehref_:=htmlquery.Find(tr,`./td[2]/a/@href`)[0].Attr[0].Valhref:=base_url+href_blog.href=hreflist_data[i]=blogi=i+1}return list_data
}

第三名:Python ==> 1.7s

Python参考代码:

# -*- coding:utf-8 -*-
import requests
from lxml import etree
import timestart_time =time.time()
headers = {"Connection": "keep-alive","Pragma": "no-cache","Cache-Control": "no-cache","Accept": "*/*","X-Requested-With": "XMLHttpRequest","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Origin": "http://220.163.118.100","Referer": "http://220.163.118.100/yns/bidResultNotice","Accept-Language": "zh-CN,zh;q=0.9"
}
cookies = {"JSESSIONID": "CF798AC4AC25E5BD622A2898B9C94B89"
}
url = "http://220.163.118.100/yns/bidResultNotice/rest"
data = {"listVo.projectName": "","listVo.serviceType": "","listVo.divisionCode": "530000","purOrgCodePanel_selectname": "","selectBox_purOrgCodePanel": "","listVo.purOrgCode": "","listVo.bidResultDateBegin": "","listVo.bidResultDateEnd": "","pageNumber": "0","sourtType": "","": ""
}
response = requests.post(url, headers=headers, cookies=cookies, data=data, verify=False)html=etree.HTML(response.text)
tr_list=html.xpath('//table[@class="table table-hover table-bordered table-list"]/tr')[1:]
data_list=[]
for tr in tr_list:item={"title":"".join(tr.xpath('./td[2]/a/text()')).strip(),"href":'http://220.163.118.100'+tr.xpath('./td[2]/a/@href')[0].strip(),"bid_time":tr.xpath('./td[6]/text()')[0].strip()}data_list.append(item)
print(data_list)
end_time =time.time()
print("总耗时:",end_time-start_time)

代码一看就很清楚了,代码行数,总耗时一对比,基本上就能看出那个效率高那个效率低,哈哈

作者闲的,技术交流可以加 企鹅:2695733665

JavaScript---GO---Python三大语言爬虫相关推荐

  1. python和易语言爬虫速度_如何优化 Python 爬虫的速度?

    在开发爬虫的时候,对于老工程师的工作节奏一般是先实现爬虫的抓取逻辑,然后就要提升爬取的效率了. 众所周知想提升效率就要涉猎到并发编程姿势啦,所以今天我们抛砖引玉,不去过多的计较太原理和抽象的东西,而是 ...

  2. 微软、阿里抢占开源一线,JavaScript、Python 备受热捧,GitHub 2020 数字洞察报告揭晓!...

    作者 | Allumos 来源 | 源光闪烁 开源软件已经成为人类数字社会的基石,是全人类共同努力的结晶,开源协作对人类数字文明的发展起到了巨大的推动作用.GitHub 作为全球范围内最主要的开源协作 ...

  3. Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)

    文章目录 系列目录 原项目地址 第37课:并发编程在爬虫中的应用 单线程版本 多线程版本 异步I/O版本 总结 第38课:抓取网页动态内容 Selenium 介绍 使用Selenium 加载页面 查找 ...

  4. 语言爬虫字段为空_我为什么建议前端将Python 作为第二语言?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 前端劝退师 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  5. 【三万粉丝终极福利】Python、C、Java三大语言学习路线和资源整理

    大家好,我是辣条. 今天给大家带来三万粉丝三大语言学习路线和资源整理,收藏就对了. 目录 C语言 学习路线 学习书籍 学习视频 资源推荐 Java语言 学习路线 学习书籍 学习视频 资源推荐 Pyth ...

  6. Perl,Python,Ruby,Javascript 四种脚本语言比较

    Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...

  7. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  8. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  9. r语言 python 股票_python r语言 股票!如何用python写出爬虫?

    python计时器问题? import time print('按下回车开始,按下 Ctrl C 暂停/停止计时.') while True: input("") starttim ...

最新文章

  1. 一些能说到点子上的课程
  2. [转]web标准的几个误区
  3. HttpUrlConnection get和post简单实现(疑惑解决)
  4. 哈佛经济学教授卧底贫民窟8年,揭开穷人最大真相:这比贫穷更可怕
  5. java文件流 m.jb51.net_Linux指令范例速查手册(第2版)PDF 下载
  6. 机器学习面试题(part4)
  7. php 网络图片 转本地,PHP将Base64图片转换为本地图片并保存
  8. thinkphp u不加载css,解决ThinkPHP样式无法加载问题(CSS,JS)
  9. 删除MSSQL数据库text字段中恶意脚本Script=***.js/script的方法
  10. fiddler抓包后Jmeter实现登录接口
  11. c++ 字符串替换所有字符串
  12. 微信小程序中wx.canIUse的坑
  13. 北京邮电计算机相关知识,2019北京邮电大学计算机专业考研经验分享
  14. 关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案
  15. 未认证公众号在文章添加链接
  16. ae计算机配置要求,AE和PR要求电脑的最低配置分别是?
  17. ”核高基”重大软件专项向微软COM技术敞开大门
  18. 从苹果开发者网站上申请邓氏编码遇到的坑
  19. 软考高项-系统架构师考试心得
  20. GameFramework教程✨十一、使用 AssetBundle 编辑工具

热门文章

  1. 计算机cmd复制粘贴指令,Win7在命令提示符(cmd.exe)中如何进行复制、粘贴工作
  2. 遗传算法的matlab实现
  3. 签到 2016.6.17
  4. 全世界人民为什么都笑了
  5. 基于微信小程序的大学生心理测试
  6. 金山毒霸四月安全趋势 继续关注网页挂马
  7. WinXP快捷键大全
  8. 2003服务器域控电脑,windows server 2003安装域控制器的方法
  9. 视频监控系统中的平台服务器,视频监控系统中的服务器
  10. 201208-PyTorch求解矩阵正交基