1.爬虫概念
什么是爬虫?
程序猿:写程序,然后去互联网上抓取数据的过程
互联网:网,有好多的a连接组成的, url(统一资源定位符)
通用爬虫、 聚焦爬虫
通用爬虫:百度、360、搜狐、谷歌…
原理:
(1) 抓取网页
(2) 采取数据
(3) 数据处理
(4) 提供检索服务
通用爬虫如何抓取新网址
- 主动提交
- 设置友情链接
- 百度会和DNS服务商合作,抓取新网址
- 百度竞标、根据pagerank值、访问量、点击量(SEO)
- robots.txt. 如果不想让百度爬取,可以编写robots.txt , 一个口头协议
聚焦爬虫:根据特定的需求,抓取指定的数据
思路:代替浏览器上网
网页的特点:1. 都有自己唯一的url;2. 都是html结构;3.使用的都是http,https协议
步骤:1。 给一个url;2.写程序,模拟浏览器访问url; 3,解析内容,提取数据。
2. http协议
参见博客 http://www.cnblogs.com/wqhwe/p/5407468.html
http://www.cnblogs.com/10158wsj/p/6762848.html
HTTP请求中的常用消息头
accept:浏览器通过这个头告诉服务器,它所支持的数据类型
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
Host:浏览器通过这个头告诉服务器,想访问哪台主机
If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接
3. urllib库
encode() 字符串—》字节
如果小括号里不写,默认是utf-8
decode() 字节—》字符串
urllib.request
urlopen(url)
urlretrieve(url, image_path)
import urllib.request
# encode () 字符串---》字节类型 不写默认是UTF-8
# decode () 字节类型---》字符串 不写默认是UTF-8
url = 'http://www.baidu.com'
# 完整的URL http://www.baidu.com/index.html?name=goudan&password=123#lala
response = urllib.request.urlopen(url)
# print(response.read()) # 读取相应内容,为字节类型
# print(response.geturl()) # 获取请求的url
# print(response.getheaders()) # 获取头部信息,列表里有元组
# print(response.getcode()) # 获取状态码
# print(response.readlines()) #按行读取,返回列表,都是字节类型
# with open('baidu.html', 'w', encoding='utf-8') as fp:
# fp.write(response.read().decode())
with open('baidu1.html', 'wb') as fp:
fp.write(response.read())
urllib.parse
quote url编码函数,将中文转换为%XXX
unquote url解码函数,将%XXX转换成指定字符
urlencode 给一个字典,将字典拼接为query_string, 并且实现了编码功能
get方式
import urllib.request
import urllib.parse
keyword = input('请输入想要搜索的内容:')
url = 'http://www.baidu.com/s?'
#参数写成一个字典
data={
'ie':'utf-8',
'wd':keyword,
}
query_string = urllib.parse.urlencode(data)
url +=query_string
#发送请求
response = urllib.request.urlopen(url)
filename = keyword + '.html'
with open(filename,'wb') as fp:
fp.write(response.read())