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


posted @ 2018-07-06 18:37  duxiao123  阅读(497)  评论(0编辑  收藏  举报