网络爬虫

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.request
import urllib.parse
#首先拼接一个url
key=input('输入你需要搜索的内容')
baseurl = 'https://www.baidu.com/s?'

wd = {'wd':key}
key = urllib.parse.urlencode(wd)

url = baseurl + key

headers = {'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.request
import urllib.parse
import random
import time

#首先拼接一个url
header_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('爬取结束')

  

 

posted @ 2019-06-24 18:22  为挽月明  阅读(167)  评论(0编辑  收藏  举报
hello word


为挽月明© liclap@Foxmail.com