爬虫入门第一天—1
import urllib.request
def load_data():
url = "http://www.baidu.com/"
# 发送get请求
# http对应的请求
# response 是http响应的对象
response = urllib.request.urlopen(url)
print(response)
# 读取内容 bytes类型
data = response.read()
print(data)
# 将文件获取的内容转换成字符串
str_data = data.decode("utf-8")
print(str_data)
# 将数据写入文件
with open("baidu.html","w",encoding="utf-8") as f:
f.write(str_data)
str_name = "baidu"
bytes_name = str_name.encode("utf-8")
print(bytes_name)
# python爬取的数据类型:str bytes
# 如果爬回来的数据是bytes类型,但是你写入的时候需要字符串 decode("utf-8")
# 如果爬取的是str类型,但是你要写入bytes类型 encode("utf-8")
load_data()
首先导入urllib库里面的request这个功能 然后定义一个函数。
然后在函数内部进行定义一个url的函数,然后赋值百度的url地址。url地址就是浏览网页的地址,也就是域名,网址。
然后用response进行调用urllib里面的request的urlopen进行传入url这个函数。
然后用print打印了一下这个response是内容。 <http.client.HTTPResponse object at 0x000001EA03D4E9E8>
然后定义一个data进行读取这个response的内容,语句response.read() 然后默认的话 打印的话 是一串bytes类型的东西
然后用print输出这个data的内容,就会发现这是一行的内容,因为这个是bytes文件,所以这里就要对它进行转换成字符串。
也就是decode("utf-8")然后重新赋值个另外一个函数,这里我写的是str_data,大概内容如下图。
然后如果要写入文件的话,用with 然后open,这个open是打开的意思,详情可以百度Python文件管理,然后里面第一个参数是写文件名.文件,第二个是文件写入方式,第三个encoding是写编码格式,一般常规都是utf-8,然后在后面进行as f。
然后f.write这个就是传入的意思,可以把刚才上面转换字符串的那个内容进行传入进来。然后进行调用函数就行了。
爬虫第一天-2
import urllib.request
import urllib.parse
import string
def get_method_params():
url = "http://www.baidu.com/s?wd="
# 拼接字符串(汉字)
name = "美女"
final_url = url + name
print(final_url)
# 代码发送了请求
# 网址里面包含了汉字,ASCII是没有汉字的,url转译
# 将包含汉字的网址进行转译
encode_new_url = urllib.parse.quote(final_url,safe=string.printable)
# 利用代码发送网络请求
print(encode_new_url)
response = urllib.request.urlopen(encode_new_url)
print(response)
# 读取内容
data = response.read().decode()
print(data)
# 保存到本地
with open("02_encode.html","w",encoding="utf-8")as f:
f.write(data)
# # python是解释性语言 解析器只支持ASCII0-127 不支持中文
get_method_params()
常规先贴代码,首先导入这三个库,一个是爬虫,一个是转译,一个是字符串
然后定义一个百度的url,另外还定义了一个其他的一个中文,进行拼接。然后可以看下拼接效果。
这里就可以看到,完全没有拼接好,之所以出现这个原因是因为Python是解释性编程语言,解析器ASCII码不支持中文,所以就会出现了这个样子。但是这样的话,可以利用另外的两个库,进行转译,把中文转换成ASCII码格式,让解析器可以识别。
也就是上面的那个urllib.parse.quote然后里面包着那个拼接的url,然后safe=string.printable,这样就可以转换成ASCII码了。
然后下面的内容同上,调用,访问,保存,改码。
学习Python第一天。笔记
1.http:当用户在地址栏输入了网址 发送网络请求的过程是什么
get请求 常用
(1)比较便捷
缺点:不安全明文
参数的长度有限制
post请求
(1)比较安全
(2)数据整体没有限制
(3)上传文件
put(不安全)
delete(删除一些信息)
发送网络请求需要带一些数据给服务器不带数据也可以
请求头里面 requestheader
返回数据 response
head(返回请求头)
(1)Accept:文本格式
(2)Accept-Encoding: 编码格式
(3)Connection: 长链接;短连接
(4)Cookie 验证用的
(5)Host:域名
(6)Referer :从哪个页面跳转来的
(7)User-Agent:浏览器和用户信息
2.爬虫入门:使用代码模拟用户 批量发送网络请求 批量获取数据
(1)爬虫的价值:
1.买卖数据(高端的领域价格特别贵)
2.数据分析:出分析报告
3.流量
4.指数:腾讯指数,微博指数
合法性:灰色产业
政府没有法律规定爬虫是违法的,也没有说法律规定爬虫是合法的。
公司概念:公司让你爬取数据库(窃取商业机密)责任在公司 技术无罪
5.爬取可以爬取所有东西?(不是)爬虫只能爬取用户能访问到的数据
爬取爱奇艺视频(VIP非VIP)
(1)普通用户只能看非VIP 爬取非VIP的视频
(2) VIP 爬取VIP视频
(3)普通用户想要爬取VIP视频(黑客)
爬虫的分类:
(1)通用爬虫
1.使用搜索引擎:百度,谷歌,360,雅虎,搜狗
优势:开放性,速度快
劣势:目标不明确
返回内容:基本上%90是用户不需要的
不清楚用户的需求在哪里
(2)聚焦爬虫(学习)
1.目标明确
2.对用户需求十分精准
3.返回的内容很固定
增量式:翻页:从第一页请求到最后一页
Deep 深度爬虫:静态数据:html,css
动态数据:js代码,加密的js
robots:是否允许其他爬虫(通用爬虫)爬取某些内容
聚焦爬虫不遵守robots.txt
反爬虫:干掉用户
爬虫和反扒做斗争:资源对等,胜利的永远是爬虫
爬虫工作原理:
1.确认你抓取目标的URL 核心(URL)
2.使用Python代码发送请求获取数据(java Go)
3.解析获取到的数据(精确数据)
(1)找到新的目标(url)回到第一步(自动化)
4.数据持久化
python3(原生提供的模块): urlib.request
(1) urlopen:
1.返回response对象
2.response.read()
3.bytes.decode("utf-8")
(2)get:传参
1.汉字报错 解释器 ASCII没有汉字,url汉字转码
(3)post
(4)handle处理器的自定义
(5)urlError
python(原生提供的):urlib2
5.request(第三方)
6.数据解析:xpath bs4
7.数据存储