Python上手很容易,免费开源,跨平台不受限制,面向对象,框架和库很丰富。

Python :Monty Python's Flying Circus (Python的名字来源,和蟒蛇其实无关)。

通过homebrew和pyenv可以维护多个Python版本。

相关知识

HTTP = HyperText Transfer Protocol

URI = Uniform Resource Identifier 强调资源

URL = Uniform Resource Locator 强调资源的位置

可以说url是一种具体的uri,uri是一个抽象的概念,即url标志一个uri,并指明了位置。

所谓web api,就是通过Http请求实现。

Head:向服务器索要与get请求相一致的相应,响应不会被返回。

GET:向特定资源发出请求。

PUT:向指定资源位置上传最新内容。

POST:向指定资源提交数据进行处理请求。

DELETE:删除指定URI所标识的资源。

PATCH:修改某一资源。

基本上使用就是GET和POST。

# -*- coding: UTF-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
import json
# # get url = 'http://kaoshi.edu.sina.com.cn/college/scorelist?tab=batch&wl=1&local=2&batch=&syear=2013' request = requests.get(url = url) #请求
request.encoding = 'utf-8' #防止乱码
print request.text #读取 #post
data = {'type1': 1, 'type2': 2, 'status': 0, 'wdzjPlatId': 59}
request = requests.post('http://shuju.wdzj.com/depth-data.html',data = data)
for key in json.loads(request.text).keys(): # json.loads把json格式的数据转成字典
print key #下面有简单提到json,当然json本身不是复杂东西,详细的可以自己搜索

requests包很好用,以前写爬虫都是urllib2,这玩意很啰嗦,所以我还是推荐用requests,http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#id3

HTTP常见状态码:

200:OK

404:找不到资源

1开头的是消息,2开头的是成功,3开头的是重定向,4开头的是请求错误。

http://baike.baidu.com/link?url=A3GlzlRhQ8uaIQwuj09hBF_n9z3pCnwwbGNVaMHZ4GRXUteDmtbCxzkR5vCDk7Yp--B5bg4wIlQUO-5rfm55ff5uzTclboD2eOtjFPe69w4nnPzu2tZ2RIJAUlqxWXtU

import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print r.status_code 200

  

HTML

HTML,标记语言,不是编程语言。XML和HTML格式差不多的。

<标签 属性 = "属性的值"> </标签>

DOM文档模型

CSS(Cascading Style Sheets) 选择器: 样式定义如何显示html
  • 元素选择器 直接选择文档元素 比如head,p

  • 类选择器 元素的class属性,比如<h1 class="important"> 类名就是important .important选择所有有这个类属性的元素 可以结合元素选择器,比如p.important

  • ID选择器 元素的id属性,比如<h1 id="intro"> id就是important #intro用于选择id=intro的元素 可以结合元素选择器,比如p.important

  • 属性选择器 选择有某个属性的元素,而不论值是什么。 *[title] 选择所有包含title属性的元素 a[href]选择所有带有href属性的锚元素 还可以选择多个属性,比如:a[href][title],注意这里是要同时满足。 限定值:a[href="www.so.com"]

  • 此外还有后代,子元素选择器等

ID与类选择器的差异:ID一个文档只能出现一次 ID选择器不能使用单词列表 与类选择器一样,都区分大小写。

对于HTML,XML文件,可以使用XPath,但是XPath比较繁杂,不过可以通过浏览器的审查,然后选中你所要的目标,右击选中copy xpath来实现,也挺方便的。

Python中lxml库是实现XPath功能的,BeautifulSoup解析HTML文件,BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多。

而lxml只会局部遍历,另外lxml是用c写的,而BeautifulSoup是用python写的,因此性能方面自然会差很多。

当然这是以前,现在BeautifulSoup支持用lxml作为parser了,所以BeautifulSoup性能上也还算可以了。

http://beautifulsoup.readthedocs.io/zh_CN/latest/

此外python的爬虫框架Scrapy是建立在lxml库之上,当然当我们使用Scrapy的时候 BeautifulSoup也是可以的。

JSON

JSON,小,快,容易解析。所以当我们访问api时,获得的通常都是json格式的数据。

正则表达式

当BeautifulSoup都处理不了的数据,正则表达式是万能的,就是不断的匹配,匹配想要的内容。

正则表达式30分钟入门教程

最后存储

数据库:MySQl,SQLite,MongoDB,Redis,等等。

爬虫的简单介绍

工作流程:

将种子url放入队列,从队列中获取url,抓取内容,解析内容,将需进一步抓取的url放入工作队列,存储解析后的内容。

抓取策略:深度优先,广度优先,PageRank。

去重:Hash表,bloom过滤器。

Robots规范,网站通过Robots协议告诉搜索引擎哪些页面可以爬取,哪些不可以爬取。网站和爬虫的沟通方式,用来指导搜索引擎更好的爬取网站内容。

写一个基于深度的随机爬取wiki的简单例子:

from urllib2 import urlopen
from bs4 import BeautifulSoup
import re
pages = set()
def getLinks(pageUrl):
global pages
html = urlopen("http://en.wikipedia.org"+pageUrl)
bsObj = BeautifulSoup(html,'lxml')
try:
print(bsObj.h1.get_text())
print(bsObj.find(id="mw-content-text").findAll("p")[0])
print(bsObj.find(id="ca-edit").find("span").find("a").attrs['href'])
except AttributeError:
print("页面缺少一些属性!不过不用担心!")
for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
if 'href' in link.attrs:
if link.attrs['href'] not in pages:
# 我们遇到了新页面
newPage = link.attrs['href']
print("----------------\n"+newPage)
pages.add(newPage)
getLinks(newPage)
getLinks("")

Python 爬虫(1)基础知识和简单爬虫的更多相关文章

  1. Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现

    Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现 一丶进程基础知识 什么是程序: ​   程序就是一堆文件 什么是进程: ​   进程就是一个正在 ...

  2. Python开发(一):Python介绍与基础知识

    Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ...

  3. 基于Python的Flask基础知识

    Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...

  4. 3D开发基础知识和简单示例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

  5. Python第一章-基础知识

    第一章:基础知识 1.1 安装python.     直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...

  6. Python音频处理基础知识,这不是轻轻松松~~~

    大家好鸭,我是小熊猫 咱今天来讲一讲音频处理的基础知识上才艺~~~ 1.声音的基础 2.python读取.wav音频 欢迎加入白嫖Q群:660193417### import wave import ...

  7. python这不是有手就行?——python音频处理基础知识

    大家应该都知道声音的基础吧? 啊不知道当我没说吧~~~ 1.声音的基础 2.python读取.wav音频 Python学习交流Q群:660193417#### import wave import s ...

  8. scrapy基础知识之 关于爬虫部分一些建议:

    1.尽量减少请求次数,能抓列表页就不抓详情页,减轻服务器压力,程序员都是混口饭吃不容易. 2.不要只看 Web 网站,还有手机 App 和 H5,这样的反爬虫措施一般比较少. 3.实际应用时候,一般防 ...

  9. scrapy基础知识之防止爬虫被反的几个策略::

    动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息) 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网 ...

随机推荐

  1. JDOM读取xml

    [摘 要]JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作. 一.JDOM 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术 ...

  2. 关于 bitset 的一些题目

    参考 http://www.cplusplus.com/reference/bitset/bitset/ https://blog.csdn.net/snowy_smile/article/detai ...

  3. 基于springboot实现http响应异常信息国际化

    背景 国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正. 本文提到的异常响应信息国际化是指:前端向后台发起请求,后台在处理 ...

  4. Kail Linux渗透测试教程之在Metasploit中扫描

    Kail Linux渗透测试教程之在Metasploit中扫描 在Metasploit中扫描 在Metasploit中,附带了大量的内置扫描器.使用这些扫描器可以搜索并获得来自一台计算机或一个完整网络 ...

  5. Vim的一些补充

    查看当前路径 :pwd 切换当前路径到当前打开文件所在路径 :cd %:p:h 解释: %表示当前文件名,%:p表示包含文件名的全部路径,%:p:h表示文件所在路径(head of the full ...

  6. BZOJ 1395 [Baltic2005]Trip(最短路+DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1354 [题目大意] 给出一些车的班次,包括起点,终点,到达起点时间区间, 到达终点时间 ...

  7. 对Java Serializable(序列化)的理解和总结(一)

    导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean ...

  8. bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 -- 凸包

    1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec  Memory Limit: 64 MB Description 为了防止 ...

  9. python开发_搜索本地文件信息写入文件

    功能:#在指定的盘符,如D盘,搜索出与用户给定后缀名(如:jpg,png)相关的文件 #然后把搜索出来的信息(相关文件的绝对路径),存放到用户指定的 #文件(如果文件不存在,则建立相应的文件)中 之前 ...

  10. jquery加载解析XML文件

    xml文件 <?xml version="1.0" encoding="utf-8" ?> <taxrates> <taxrate ...