zoukankan      html  css  js  c++  java
  • Python网络数据采集

    飞到花上   采集花粉   经过处理 数据清洗 存储编程可用的数据

    urlib  BeautifulSoup  lxml  Scrapy  PdfMiner  Requests  Selenium   NLTK   Pillow  unittset  PySocks

    知名网站的API  MySQL数据库  OpenRefine数据分析工具

    PhanthomJS无头浏览器

    Tor代理服务器等内容

    -----------

    关于多进程 multiprocessing

          并发  concurrency

          集群 cluster

    等高性能采集的不多

    国内外关于网络数据保护的法律都在不断地制定与完善 

    作者介绍了美国与网络数据采集相关的法律与典型案例

    呼吁网络爬虫严格控制网络数据采集的速度  降低 被采集网站服务的负担  法律问题

    语言是思想的解释器   数据是语言的载体

    bug是产品声明中的挑战 好产品 是不断面对bug并且战胜bug的结果

    --------

    每天6点起床

    magic魔术

    网络数据采集  web  Scraping 

    巫术 wizardry

    先写一个简单的网络爬虫并不难 就是先收集数据 再显示到 命令行或者存储到数据库里

    github

    ---------

    https://github.com/REMitchell/python-scraping

    -------------

    screen scraping

    data mining

    web harvesting

    -------------

    bots 机器人

    --------

    如果你上网的唯一方式是用浏览器 

    那么你失去了很多可能

    twitter 或者维基百科的API  发现一个API同时提供了 不同的数据类型

    ------

    市场预测 机器语言翻译 医疗诊断领域 对新闻网站 文章 健康论坛的数据进行采集

    -----

    Jonathan Harris 

    Sep  Kamvar

    在2006年发起的我们感觉挺好

    wefeelfine 

    http://wefeelfine.org/

    项目

    从大量英文博客中抓取许多

    i feel

    i am feeling开头的语句

    描述这个世界每天 每分钟的 感觉

    -------

    Bill Lubanovic 写的《Python语言及其应用》

    Jessica  McKellar 的教学视频

    http://shop.oreilly.com/product/110000448.do

    -----------

    http://www.safaribooksonline.com

    ---------

    域名切换   信息收集  以及 信息存储功能的爬虫

    1990年的Nexus浏览器

    浏览器本身就是一个程序  可以分解成很多基本组件可以重用 重写

    -----------------------------------

    被分成一些子模块

    urllib.request

    urllib.parse

    urllib.error

    库 里面有模块

    ----------

    python的标准库 

    BeautifulSoup库的名字 取自 刘易斯 卡罗尔 的《爱丽丝梦游仙境》里的同名诗歌

    化平淡为神奇

    ----

    有病没药  天灾

    -------

    BS4  

    BeautifulSoup

    -----------

    sudo  apt-get install  python-bs4

    mac

    sudo  easy_install  pip

    pip

    pip  install beautifulsoup4

    ------------

    prettify---修饰

    -----

    bsObj.html.body.h1

    bsObj.body.h1

    bsObj.html.h1

    -----------------

    万一 爬着爬着 跌机了咋办

    -------------

    如果服务器不存在的话  urlopen会返回一个None对象

    Beautiful对象找不到的时候返回的也是None

    标签下面的标签没有的 话

    就会

    AttributeError错误

    ---

    import   urllib.request
    from urllib.error import HTTPError
    from bs4 import BeautifulSoup
    def getTitle(url):
    try:
    html=urllib.request.urlopen(html)
    except HTTPError as e:
    return None
    try:
    bsObj=BeautifulSoup(html.read())
    title=bsObj.body.h1
    except AttributeError as e:
    return None
    return title
    title=getTitle("http://www.pythonscraping.com/pages/page1.html")
    if title==None:
    print("题目不能是空")
    else:
    print(title)
    -----------
    米开朗其罗
    如何完成《大卫》
    很简单 只要用锤子 把石头上不像大卫的地方敲掉就好了
    =----------
    页面解析难题(Gordian Knot)的时候
    当网站管理员对网站稍作修改之后 这行代码就会失效 甚至可能会毁掉整个网络爬虫
    -------------
    寻找 打印此页 的链接
    看看网站有没有HTML样式更好的移动版
    把自己的请求头设置成处于移动设备的状态 然后接受网站移动版


    寻找隐藏在Javascript文件里面的信息
    我曾经把一个网站上 的街道地址 整理成格式整洁的数组时候
    查看过内嵌谷歌的javascript文件


    网站标题也可以从网页的URL链接里获取



      如果你找的信息只是存在一个网站上  别的地方没有

    三思而后行写代码

    --------------

    Lambda表达式 

    本质上就是一个函数

    可以作为其他函数的 变量使用

    一个函数不是定义成f(x,y)

    而是定义成 f(g(x),y)

    或者f(g(x),h(x))的形式

    ----

    BeautifulSoup允许我们把特定函数类型当作findAll函数的参数

    唯一限制条件是

    这些函数必须把一个标签作为参数且返回结果是布尔类型

    BeautifulSoup用这个函数来评估它遇到的每个标签对象

    最后评估结果为真的标签保留 将其他标签删除

    soup.findAll(lambda tag:len(tag.attrs)==2)

    这行代码会找出下面的标签:

    <div  class="body"  id="content"></div>

    <span style="color:red" class="title"></span>

    -----

    lambda 表达式选择标签  将是regular  expression的完美替代方案

    -------

    除了使用BeautifulSoup  (Python里最受欢迎的HTML解析库之一)

    lxml  (http://lxml.de/)  解析 HTML  XML文档

    非常底层的实现  大部分源码用c写的

    学习曲线越陡峭  你可以越快学习它

    处理HTML文档时很快

    -----------

    HTML parser Python自带的解析库

    不用安装 

    https://docs.python.org/3/library/html.parser.html

    ----------

    返回的是Python字典对象

    可以获取和操作这些属性

    myImgTag.attrs["src]

    ----------------

    本质是一种递归

    使用网络爬虫你必须谨慎地考虑需要消耗多少网络流量

    ---

    还要尽力思考能不能让采集目标服务器负载更低一些

    ---------

    维基百科六度分割理论

    -----

    文 贝肯(kevin  Bacon)

    六度分隔值游戏

    两个游戏中  都是把两个不相关的 主题

    维基百科里是词条之间的链接

    凯文 贝肯是用出现在同一部电影里的演员来 链接

    用一个总数不超过六条的主题链接起来 包括原来的两个主题

    http://oracleofbacon.org/index.php

    ------------

    from urllib.request import  urlopen
    from bs4 import BeautifulSoup

    html=urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon")
    bsObj=BeautifulSoup(html)
    for link in bsObj.findAll("a"):
    if 'href' in link.attrs:
    print(link.attrs['href'])
    ----------



    维基百科的每个页面充满了 侧边栏 页眉 页脚 链接
    连接到 分类页面 对话页面 其他不包含词条的页面的链接:
    为了判断维基百科的内链是否链接到 一个词条
    他写了一个很大的过滤函数
    超过100行代码
    不幸的是
    在项目启动的时候 没有花时间去比较
    词条链接和其他链接的差异
    ---
    URL链接不包含分号
    在id是bodyContent的div标签里
    URL链接都是以/wiki开头
    ----------
    http://regexpal.com/网站 上在线测试正则表达式
    -----------
    不同邮箱服务器的邮箱地址的具体规则不尽相同
    --------
    邮箱的正则表达式
    ---------
    [A-Za-z0-9._+]+@[A-Za-z]+.(com|org|edu|net)
    ----------
    我们后面要建立的爬虫
    也是顺着链接从一个页面跳转到另一个页面
    描绘出一张网络地图
    这次 不再忽略外链 跟着外链跳转
    爬虫是不是可以记录我们浏览过的没一个页面上的信息
    相比之前我们做的 单个域名采集
    互联网采集要难的多
    不同网站的布局迥然不同
    意味着我们必须要寻找的信息以及查找方式上都极具灵活性
    -------------
    芝麻街
    http://www.sesamestreet.org
    ------------
    我要收集哪些数据?这些数据可以通过采集几个已经确定的 网站 完成吗?
    我的爬虫需要发现那些我可能不知道的网站吗
    --
    我的爬虫到了某个站 是立即顺着出站链接跳到一个新站还是在网站上待会
    深入采集网站的内容
    有没有我不想采集的一类网站
    对非英文网站的 内容感兴趣吗

    我的行为引起了某个网站网管的怀疑
    我如何避免法律责任

    ------
    写网络爬虫的挑战之一 是你经常要重复一些简单人物
    找出网页上的所有链接 区分内链 外链 跳到新的页面
    -------
    http://scrapy.org/dowmload


  • 相关阅读:
    两个排序数组的第k小——Java实现
    单向链表反转——递归与非递归实现
    白话HMM系列3——维特比算法求解隐藏序列
    白话Shell命令1——top查看Linux进程
    白话HMM系列2——Baum Welch算法的进阶
    Hadoop原理深度剖析系列1——Hadoop的基本知识
    白话HMM系列1——从一个缩略语还原的例子说起
    软件工程第二次作业
    Hello World!
    查看帐号授权信息
  • 原文地址:https://www.cnblogs.com/yizhixuepython/p/9275145.html
Copyright © 2011-2022 走看看