博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络爬虫
阅读量:4557 次
发布时间:2019-06-08

本文共 3737 字,大约阅读时间需要 12 分钟。

1、网络爬虫(网络蜘蛛,网络机器人)

  1、定义:抓取网络数据的程序

  2、用Python程序模仿人点击浏览器访问网站

  3、目的:获取大量数据进行分析

2、企业获取数据的方式

  1、公司自有的数据

  2、第三方数据平台购买

  3、爬虫爬取数据:市场上没有,或者价格太高

3、Python做爬虫优势

  请求模块,解析模块丰富成熟,强大的Scrapy爬虫框架

  请求网站后返回的是网站的全部代码,而解析模块可以网页进行分析获取我们想要数据

  PHP:对多线程,异步支持不太好

  JAVA:代码笨重,代码量大

  C/C++:虽然效率高,但是代码成型慢

4、爬虫分类

  1、通用网络爬虫(搜索引擎引用,需要遵循robots协议)

  比如:谷歌,百度网站 

  robots协议:网站通过Robots协议告诉搜索引擎那些页面可以抓,那些页面不可以抓

  说明:

     每一个网站都有robots协议,有百度快照字样就是百度爬取的网站

  2、搜索引擎如何获取一个新网站的URL呢

    1、网站主动向搜索引擎提供(百度站长平台)

    2、DNS服务器(万网),快速收录网站

  3、聚焦网络爬虫

    自己写的爬虫程序:面向主题爬虫,面向需求爬虫

5、爬取数据步骤

  1、确定需要爬取的URL地址

  2、通过HTTPS/http协议获取相应HTML页面

  3、解析相应

    1、所需数据,保存

    2、页面中新的URL,继续第二步

6、web

  1、URL:

    scheme://host[:port]/path/..../[?query-string][#anchor]

    协议    域名  端口 资源路径  查询参数  锚点

    https://www.cnblogs.com/followlqc/p/11059943.html    (前端页面源码带#的是锚点)

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=request_25_pg&wd=URL%208&oq=URL&rsv_pq=af88360f000634cf&rsv_t=b435hopykhl%2BknVEBM3T%2Fhq4GWhwmViQ7dmPg6TTbxbFQ8M6NOK%2BdBCzuL%2B2agWX5Ypk0Q&rqlang=cn&rsv_enter=1&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1930&rsv_sug4=2357

    多个查询参数之间用&做分隔

    锚点跳到网页指定位置

 

7、请求头(Request Headers)

     #接受数据类型

  #是否支持压缩,解压缩

  #支持的语言

  #缓冲控制

  >0直接从浏览器缓存中提取

  <0向浏览器请求确认,该资源是否修改

  #支持长连接

  #服务器可能检查

  #升级https

  #浏览器信息

8、get请求和post请求

  1、GET:查询参数在URL上面显示出来

  2、POST:FORM表单提交,传输大文件,数据隐藏能赶在form表单中,不会再URL中显示

9、爬虫请求模块(urllib.requsest)

  常用方法:

    1、urllib.request.urlopen('URL地址')

      作用:向网站发起请求并获取响应对象

      2、重构user-Agent

        1、不支持重构:User-Agent:urlopen

        2、支持重构:User-Agent:urllib.request.Request

    2、urllib.requqest.Request('URL',header={})

     使用流程

       1、创建请求对象

       

       2、发请求获取相应对象

 

       3、获取响应内容

 

     3、获取响应对象的方法response

        1、read()

        2、getcode():返回http响应码

          200:成功

          302:临时转移至新url

          404:页面未找到

          500:服务器异常

        3、geturl()

          1、返回实际数据的url

6、编码模块(urllib.parse)

  1、urllib.parse.urlemcode({})

  写程序:输入你要搜索的内容

  保存到本地.....html..

import urllib.requestimport urllib.parse#首先拼接一个urlkey=input('输入你需要搜索的内容')baseurl = 'https://www.baidu.com/s?'wd = {'wd':key}key = urllib.parse.urlencode(wd)url = baseurl + keyheaders = {'User-Agent':'ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}req = urllib.request.Request(url,headers=headers)res = urllib.request.urlopen(req)html = res.read().decode('utf-8')with open('suosou.html','w',encoding='utf-8') as f:    f.write(html)print('搜索结束')

  

7、案例:百度贴吧数据抓取

    1、要求

      1、输入抓取的贴吧名称

      2、起始页

      3、终止页

      4、保存到本地:第一页HTML,第二页HTML。。。。

    2、步骤

      1、找url规律,拼接url

      2、第一页:http://

      3、获取页面内容(发请求获取响应)

      4、保存(本地,数据库)

              

  

import urllib.requestimport urllib.parseimport randomimport time#首先拼接一个urlheader_list=[{"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},             {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},            {"User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)"}             ]headers=random.choice(header_list)#主程序name = input("请输入贴吧名")begin = int(input("输入起始页"))end = int(input("请输入终止页"))kw={'kw':name}kw=urllib.parse.urlencode(kw)for i in range(begin,end+1):    pn=(i-1)*50    url = 'http://tieba.baidu.com/f?'+kw+'&pn='+str(pn)    print("正在爬取第%d页" % i)    #发送请求    req = urllib.request.Request(url,headers=headers)    res = urllib.request.urlopen(req)    time.sleep(3)    html = res.read().decode('utf-8')    #写入文件    filename=name + '第'+str(i)+'页.html'    with open(filename,'w',encoding='utf-8') as f:        f.write(html)        print("已经爬取完第%d页"%i)        print('*'*15)print('爬取结束')

  

 

转载于:https://www.cnblogs.com/followlqc/p/11078688.html

你可能感兴趣的文章
读取短信回执
查看>>
EF 数据初始化
查看>>
PreparedStatement与Statement
查看>>
WebService -- Java 实现之 CXF ( 使用CXF工具生成client 程序)
查看>>
[LeetCode]Two Sum
查看>>
Android学习--网络通信之网络图片查看器
查看>>
[LeetCode] Excel Sheet Column Number
查看>>
安卓广播接收者
查看>>
999线监控
查看>>
Redis在python中的使用
查看>>
理解class.forName()
查看>>
九大排序算法再总结
查看>>
Uva10290 - {Sum+=i++} to Reach N
查看>>
每日一小练——数值自乘递归解
查看>>
二叉搜索树 (BST) 的创建以及遍历
查看>>
MyBatis/Ibatis中#和$的区别
查看>>
【JAVASCRIPT】React学习-组件生命周期
查看>>
win 64 文件操作
查看>>
LeetCode : First Bad Version
查看>>
pythone函数基础(14)发送邮件
查看>>