python爬虫入门

大数库时代:数据如何产生?

  • 1. 大的公司大的企业:通过用户产生的数据

  • 2.大的数据平台:通过收集或者和其他企业或者公司合作

  • 3.国家政府大的机构:通过省县乡或者其他方式统计汇总产生的

  • 4.数据咨询公司:通过收集或者和其他企业或者公司合作,会根据数据做分析对比形成报表,给你做数据参考

  • 5.最终假如以上方式都不能满足的时候,我们就需要一个爬虫工程师,去专门做数据的提取

1.什么是爬虫?

就是一段自动获取互联网数据的程序

网站的三大特性:

  • 1.每一个资源都一个url(统一资源定位符),是唯一的
  • 2.网页都是使用HTML(超文本)文本展示数据的
  • 3.通过HTTP/HTTPS(超文本传输协议),获取和传递HTML

3.如何实现一个爬虫

  • (1).找到目标url
  • (2).根据url发起请求
  • (3).解析响应结果:
       a).提取目标数据
    b).如何存在新的url,进一步提取(会执行1-3这个循环)
  • (4).爬虫结束:所有符合条件的url请求全部获取完毕,意味着爬虫结束

4.为什么要使用python做爬虫?

PHP,java,c/c++,python .....

  • PHP:可以用来做爬虫,但是对多任务的支持不是太好,爬虫是对像驴要求比较高的,
      所以说PHP天生不是干这个事情的.

  • JAVA:生态圈很完善,并且用途非常广泛(后端,移动端..),java做爬虫是
       python最大的竞争对手,但是java代码量比较大,重构的成本比较高.

  • c/c++:肯定是可以完成爬虫这件事的,并且运行的效率是非常高的,但是学习的门槛
       非常高,各个模块可能需要你自己封装和定制.(能使用c/c++的人一般比较nb)

  • python:语法简介,代码优美,可读性高,并且对各模块的支持比较好,有很多强大的三方包,
        对多任务的处理也比较好,urllib,requests都能够很好的帮助我们实现一个爬虫项目,
        解析的库也非常多(lxml,bs4,pyquery...),并且还有强大的scrapy爬虫框架
    和scrapy_redis分布式爬虫框架.并且python作为一门胶水语言,对于其他语言的
        调度也是非常方便的.

爬虫分为两类:

  • 通用爬虫:通用爬虫是浏览器的重要组成部分,将互联网上所有的网页下载到本地,
         做了一个镜像备份,提取重要数据(过滤数据,分词,去广告等等等..)

步骤其实跟上面介绍的类似

搜索引擎的爬取的url通过什么方式获取的??

1.通过网站的外链
2.通过网页提交url:(百度:http://zhanzhang.baidu.com/linksubmit/url)
3.各大搜索引擎公司也会和DNS服务商合作
DNS:将我们的域名转化为ip的一种技术
通用爬虫(搜索引擎)的缺点:
  • 1.需要遵循robot协议:Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
  • 2.搜索引擎返回的结果千篇一律没有很好的针对性,不能够特殊的用户群体返回对应的数据
  • 3.搜索引擎一般情况下获取的是文本信息,处理图像,音频,视频多媒体还是有困难的.
聚焦爬虫:是面向主题的爬虫,由需求产生的,是一种定向的爬虫,

在爬取网页数据的时候,会对网页数据进行一些赛选,保证之抓取和
需求相关的数据,以后我们更多的就是实现聚焦爬虫

做爬虫需要掌握的基本知识
1. python的基本语法
2. 前端知识
3. 数据持久化的知识
4. 了解基本的反爬虫的手段(header请求头,验证码,cookies,代理)
5. 静态页面和动态页面(ajax,js),selenium(获取的页面源码是经过浏览器渲染之后的最终结果)
6. 多任务处理,爬虫框架,分布式爬虫等等
HTTP:超文本传输协议,主要使用来将html文本传输到本地浏览器.

HTTPS:作用和HTTP一致,只是多了SSL(安全套接字层),保证数据传输的安全性

  • 1.建立一个安全有效的数据传输通道,保证数聚的安全性
  • 2.保证网站的真实性和有效性
url的组成部分:
1.scheme:协议
2.host:指的是域或者ip
3.port:端口
4.path:资源路径
5.query-string:请求的参数
6.anchor:锚点,主要是实现页面的定位作用
请求头:
  • User-Agent:模拟浏览器加载
  • Cookies:携带cookies第一可以维持会话,告诉浏览器用户的身份信息
  • Refere:告诉浏览器,当前请求,是从哪个页面发起的.
常见的状态码:
2xx:表示服务器成功接收请求并已完成整个处理过程。
200(OK 请求成功)。

3xx:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、 常用
301: 永久重定向
302:临时重定向(所请求的页面已经临时转移至新的url)

4xx:客户端的请求有错误.
400:错误请求,服务器无法解析请求
401:未授权,没有进行身份验证
403:服务器拒绝访问
404:服务器无法找到被请求的网页
408:请求超时

5xx:服务器端出现错误
500:服务器内部错误
501:服务器不具备完成请求的功能
503:服务器不可用


下面是刚入门python爬虫一个小案例


#https://tieba.baidu.com/f?kw=美女&ie=utf-8&pn=0&pagelets=frs-list/pagelet/thread&pagelets_stamp=1542277688157
#https://tieba.baidu.com/f?kw=美女&ie=utf-8&pn=50&pagelets=frs-list/pagelet/thread&pagelets_stamp=1542277748217
#https://tieba.baidu.com/f?kw=美女&ie=utf-8&pn=100&pagelets=frs-list/pagelet/thread&pagelets_stamp=1542277714526
#尾页
#https://tieba.baidu.com/f?kw=美女&ie=utf-8&pn=2359250&pagelets=frs-list/pagelet/thread&pagelets_stamp=1542277714526


from urllib.parse import urlencode,unquote


#小案例,根据关键字,或百度贴吧搜索页面源码,保存到本地
from urllib import request
from urllib.parse import urlencode
def down_load_page_html(startPage,endPage,keyword):
    #构建一个headers
    req_header = {
        'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0',
    }
    for i in range(startPage,endPage+1):
        print('正在下载'+str(i)+'页')

        parmas = {
            'kw':keyword,
            'pn':(i-1)*50,
        }
        #使用urlencode,将参数转为url编码格式
        parmas_str = urlencode(parmas)
        full_url = 'https://tieba.baidu.com/f?'+parmas_str
        #构建一个request对象
        req = request.Request(url=full_url,headers=req_header)
        #根据构建一个request对象,发起请求
        response = request.urlopen(req)

        filename = keyword+str(i)+'.html'

        html_str = response.read().decode('utf-8')

        with open(filename,'w') as file:
            print('正在写入' + str(i) + '页')
            file.write(html_str)


if __name__ == '__main__':
    startPage = int(input('请输入起始页'))
    endPage = int(input('请输入截止页'))
    #输入要搜搜的关键字
    keyword = input('输入搜索关键字')
    down_load_page_html(startPage,endPage,keyword)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容