当前位置: 首页 > news >正文

中国智慧城市建设门户网站怎么建立一个公众号

中国智慧城市建设门户网站,怎么建立一个公众号,网站开发费怎么入账,wordpress自定义末班爬虫不外乎是为了获取网络上的信息#xff0c;要取得信息#xff0c;你就得给给服务器发请求#xff0c;然后服务器把信息发给你#xff0c;这一步一般较为简单。服务器发给你的一般是一个html文件#xff0c;拿到文件后#xff0c;你可能会觉得这是什么乱七八糟的东西要取得信息你就得给给服务器发请求然后服务器把信息发给你这一步一般较为简单。服务器发给你的一般是一个html文件拿到文件后你可能会觉得这是什么乱七八糟的东西怎么都看不懂。我觉得对于一个非计算机系的人来说想要做点东西出来最大的困难是缺的知识太多了html看不懂http原理也不懂。所以这时候你会发现你需要去学一点html去w3cschool看一看教程你并不需要懂很多弄懂各种标签的含义能看懂html文件里的内容就行。拿到html文件接下来你要做的就是提取信息准确地说是你感兴趣的信息。你需要两样东西一样用来快速定位你要获取的信息在html源文件中的位置让你知道要提取什么另一样用来提取信息。第一样可以选firefox或chrome都自带开发者功能第二样可以用Beautiful Soup。所以你需要花一点时间了解开发者功能怎么用以及Beautiful Soup这个库的用法。会发请求会提取信息这些就够了赶紧做点东西找点成就感这样才能有动力继续做下去。比如可以做下载某些网站的图片把知乎上的答案抓到本地。有点成就感之后就有动力更深入学习了。在做的过程中你可能会遇到一些困难比如你拿到的html跟浏览器看到的html不一样你上网找一找就会发现你需要了解一个叫http请求头的东西。找一点资料看看知道http请求头是怎么回事就行了不需要完全弄懂http的原理解决当下的问题才是最重要的有什么不懂的稍后再补。学了点东西后你就知道这怎么解决这个问题了只需在发请求的时候加一个参数带上http请求头即可这叫做模拟浏览器的行为。把这个问题解决后抓取大多数网站都没有问题了。成就感又提升了一点。有时候你又会发现有一些网站需要登录才能取得一些信息。找一找资料你就会接触到“模拟登录”“post请求”等名词。这时候你又需要去学习一些http的知识了解“get”“post”是怎么回事以及如何发post请求。为了方便处理http的相关东西你最好学习一下requests这个库。学习之后参照网上的代码我相信模拟登录的问题也解决了。比如你就可以模拟登录知乎然后抓取知乎的首页看看是不是跟你用浏览器中看到的一样继续深入你就会发现这些也不够了有些信息我需要点一下“更多”按钮才会加载如何获取这些信息呢这时候你就需要分析在点“更多”按钮的时候浏览器做了什么然后去模拟浏览器的行为。如何分析呢我一般用firebug看看点击更多按钮的时候浏览器做了什么浏览器一般会发一个post请求会带上一些参数你需要知道的就是要带上哪些参数发请求给谁。这一步可能会有点困难可以慢慢体会怎么做。一旦越过了这这道坎你就几乎可以取得任何你想要的信息了。假设你已经成功了得到了服务器传回来的数据你可能会发现这又跟html不一样了。这是一个叫json的东西传回来的数据都在里面了接下来就是要提取数据了。所以你又要去了解json是什么如何用python处理json。基本上做完这些爬虫就算入了门。接下来为了提高性能扩大规模再去搞多线程分布式什么的吧这也是我接下来需要努力和学习的方向。最后说一些感想1. 不要急于求成编程虽然不难但也没有那么简单不要想着速成特别是对于计算机基础不是很好的人。2. 学习的过程中可能会遇到很多困难(上面可能没有提到)或许会有很多你没有接触的东西冒出来善用google一个个问题地解决缺什么补什么。3. 对于初学者来讲最重要的不是去学各种吊炸天的框架追最新的技术。技术框架是学不完的永远都会层出不穷最重要的是把基础学好。很多时候你有一个问题解决不了都是你某些方面的知识缺了。慢慢来不要急随着学习的深入再回过头来看以前的问题会有豁然开朗的感觉。4. 一定要动手做找点成就感对你继续做下去有很大的促进作用。不然的话遇到点困难很容易就放弃了。下面进入爬虫基础学习前言简单来说互联网是由一个个站点和网络设备组成的大网我们通过浏览器访问站点站点把HTML、JS、CSS代码返回给浏览器这些代码经过浏览器解析、渲染将丰富多彩的网页呈现我们眼前一、爬虫是什么如果我们把互联网比作一张大的蜘蛛网数据便是存放于蜘蛛网的各个节点而爬虫就是一只小蜘蛛沿着网络抓取自己的猎物(数据)爬虫指的是向网站发起请求获取资源后分析并提取有用数据的程序从技术层面来说就是 通过程序模拟浏览器请求站点的行为把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地进而提取自己需要的数据存放起来使用二、爬虫的基本流程用户获取网络数据的方式方式1浏览器提交请求---下载网页代码---解析成页面方式2模拟浏览器发送请求(获取网页代码)-提取有用的数据-存放于数据库或文件中爬虫要做的就是方式21、发起请求使用http库向目标站点发起请求即发送一个RequestRequest包含请求头、请求体等Request模块缺陷不能执行JS 和CSS 代码2、获取响应内容如果服务器能正常响应则会得到一个ResponseResponse包含htmljson图片视频等3、解析内容解析html数据正则表达式(RE模块)第三方解析库如Beautifulsouppyquery等解析json数据json模块解析二进制数据:以wb的方式写入文件4、保存数据数据库(MySQLMongdb、Redis)文件三、http协议 请求与响应Request用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)Response服务器接收请求分析用户发来的请求信息然后返回数据(返回的数据中可能包含其他链接如图片jscss等)ps浏览器在接收Response后会解析其内容来显示给用户而爬虫程序在模拟浏览器发送请求然后接收Response后是要提取其中的有用数据。四、 request1、请求方式常见的请求方式GET / POST2、请求的URLurl全球统一资源定位符用来定义互联网上一个唯一的资源 例如一张图片、一个文件、一段视频都可以用url唯一确定url编码https://www.baidu.com/s?wd图片图片会被编码(看示例代码)网页的加载过程是加载一个网页通常都是先加载document文档在解析document文档的时候遇到链接则针对超链接发起下载图片的请求3、请求头User-agent请求头中如果没有user-agent客户端配置服务端可能将你当做一个非法用户hostcookiescookie用来保存登录信息注意 一般做爬虫都会加上请求头请求头需要注意的参数(1)Referrer访问源至哪里来(一些大型网站会通过Referrer 做防盗链策略所有爬虫也要注意模拟)(2)User-Agent:访问的浏览器(要加上否则会被当成爬虫程序)(3)cookie请求头注意携带4、请求体请求体如果是get方式请求体没有内容 (get请求的请求体放在 url后面参数中直接能看到)如果是post方式请求体是format dataps1、登录窗口文件上传等信息都会被附加到请求体内2、登录输入错误的用户名密码然后提交就可以看到post正确登录后页面通常会跳转无法捕捉到post五、 响应Response1、响应状态码200代表成功301代表跳转404文件不存在403无权限访问502服务器错误2、respone header响应头需要注意的参数(1)Set-Cookie:BDSVRTM0; path/可能有多个是来告诉浏览器把cookie保存下来(2)Content-Location服务端响应头中包含Location返回浏览器之后浏览器就会重新访问另一个页面3、preview就是网页源代码JSO数据如网页html图片二进制数据等六、总结1、总结爬虫流程爬取---解析---存储2、爬虫所需工具请求库requests,selenium(可以驱动浏览器解析渲染CSS和JS但有性能劣势(有用没用的网页都会加载))解析库正则beautifulsouppyquery存储库文件MySQLMongodbRedis3、爬获校花网(实例)最后送给大家点福利吧基础版import reimport requestsresposerequests.get(http://www.xiaohuar.com/v/)# print(respose.status_code)# 响应的状态码# print(respose.content)  #返回字节信息# print(respose.text)  #返回文本内容urlsre.findall(rclassitems.*?href(.*?),respose.text,re.S)  #re.S 把文本信息转换成1行匹配urlurls[5]resultrequests.get(url)mp4_urlre.findall(ridmedia.*?src(.*?),result.text,re.S)[0]videorequests.get(mp4_url)with open(D:\\a.mp4,wb) as f:f.write(video.content)函数封装版import reimport requestsimport hashlibimport time# resposerequests.get(http://www.xiaohuar.com/v/)# # print(respose.status_code)# 响应的状态码# # print(respose.content)  #返回字节信息# # print(respose.text)  #返回文本内容# urlsre.findall(rclassitems.*?href(.*?),respose.text,re.S)  #re.S 把文本信息转换成1行匹配# urlurls[5]# resultrequests.get(url)# mp4_urlre.findall(ridmedia.*?src(.*?),result.text,re.S)[0]## videorequests.get(mp4_url)## with open(D:\\a.mp4,wb) as f:#     f.write(video.content)#def get_index(url):respose  requests.get(url)if respose.status_code200:return respose.textdef parse_index(res):urls  re.findall(rclassitems.*?href(.*?), res,re.S)  # re.S 把文本信息转换成1行匹配return urlsdef get_detail(urls):for url in urls:if not url.startswith(http):urlhttp://www.xiaohuar.com%s %urlresult  requests.get(url)if result.status_code200 :mp4_url_list  re.findall(ridmedia.*?src(.*?), result.text, re.S)if mp4_url_list:mp4_urlmp4_url_list[0]print(mp4_url)# save(mp4_url)def save(url):video  requests.get(url)if video.status_code200:mhashlib.md5()m.updata(url.encode(utf-8))m.updata(str(time.time()).encode(utf-8))filenamer%s.mp4% m.hexdigest()filepathrD:\\%s%filenamewith open(filepath, wb) as f:f.write(video.content)def main():for i in range(5):res1  get_index(http://www.xiaohuar.com/list-3-%s.html% i )res2  parse_index(res1)get_detail(res2)if __name__  __main__:main()并发版(如果一共需要爬30个视频开30个线程去做花的时间就是 其中最慢那份的耗时时间)import reimport requestsimport hashlibimport timefrom concurrent.futures import ThreadPoolExecutorpThreadPoolExecutor(30) #创建1个程池中容纳线程个数为30个def get_index(url):respose  requests.get(url)if respose.status_code200:return respose.textdef parse_index(res):resres.result() #进程执行完毕后得到1个对象urls  re.findall(rclassitems.*?href(.*?), res,re.S)  # re.S 把文本信息转换成1行匹配for url in urls:p.submit(get_detail(url))  #获取详情页 提交到线程池def get_detail(url):  #只下载1个视频if not url.startswith(http):urlhttp://www.xiaohuar.com%s %urlresult  requests.get(url)if result.status_code200 :mp4_url_list  re.findall(ridmedia.*?src(.*?), result.text, re.S)if mp4_url_list:mp4_urlmp4_url_list[0]print(mp4_url)# save(mp4_url)def save(url):video  requests.get(url)if video.status_code200:mhashlib.md5()m.updata(url.encode(utf-8))m.updata(str(time.time()).encode(utf-8))filenamer%s.mp4% m.hexdigest()filepathrD:\\%s%filenamewith open(filepath, wb) as f:f.write(video.content)def main():for i in range(5):p.submit(get_index,http://www.xiaohuar.com/list-3-%s.html% i ).add_done_callback(parse_index)#1、先把爬主页的任务(get_index)异步提交到线程池#2、get_index任务执行完后会通过回调函add_done_callback()数通知主线程任务完成#2、把get_index执行结果(注意线程执行结果是对象调用resres.result()方法才能获取真正执行结果)当做参数传给parse_index#3、parse_index任务执行完毕后#4、通过循环再次把获取详情页 get_detail()任务提交到线程池执行if __name__  __main__:main()涉及知识多线程多进程计算密集型任务使用多进程因为能Python有GIL多进程可以利用上CPU多核优势IO密集型任务使用多线程做IO切换节省任务执行时间(并发)线程池本文参考资料http://www.cnblogs.com/linhaifeng/articles/7773496.html
http://www.yutouwan.com/news/190907/

相关文章:

  • 网站设计实训心得体会注册网站给谁交钱
  • 秦皇岛网站建设费用网站的内连接如何做
  • 公司网站建设开源平台必要是什么网站
  • 做两个阿里网站网站开发工作介绍
  • 大连网站建设1000元优秀网页设计
  • 杭州 网站建设广州短视频推广
  • 大连手机自适应网站建设服务网站建设仪器配置表
  • 网站开发建设的步骤做静态网站的步骤
  • 网站品牌建设方案嘉兴建设规划网站
  • php图书管理系统网站开发企业网站制作公司有哪些
  • 青岛做网站方案南昌网站seo多少钱
  • 做网站协议书新手学做网站要多久
  • 国内 响应式网站yole市场调研公司
  • 模板网站五金wordpress怎么清缓存
  • 合肥建设银行招聘网站长沙建设信息中心网站
  • 寺庙网站建设方案网页制作用什么工具
  • 好的响应式网站建筑设计网站国外
  • 网站建设玖金手指排名12seo优
  • 如何更改网站图标qq炫舞做字网站
  • 中小企业建网站注意微信做单子的网站源码
  • 做母婴产品的网站建材网络销售平台有哪些
  • 简约网站后台重庆网页开发
  • 智慧团建网站网址福州微信网站建设
  • 备案的网站名称能重复备案吗吴忠网站建设多少钱
  • 有免费的网站服务器吗如何设计商务网站
  • vs2008做网站单位网站建设 管理制度
  • 怎么建com的网站什么网站招聘外国人做兼职
  • 专业网站建设排名友情链接你会回来感谢我
  • 北京十大网站建设公司网站界面设计和ios移动界面设计的区别
  • 风铃做的网站能否推广网址导航app大全