廖雪峰爬虫第一节

http中的一些基本名词

requestheader — 请求头里面
response — 返回数据
Accept — 文本格式
Accept-Encoding— 编码格式
Connection— 长链接 短连接
Cookie— 验证用的
Host— 域名
Referer— 标志从哪个页面跳转过来的
User-Agent— 浏览器和用户的信息

爬虫的基本原理

  1. 确认你抓取目标的url是哪一个(找)
  2. 使用python代码发送请求获取数据(java、Go)
  3. 解析获取到的数据(精确数据)–找到新的目标(url)回到第一步(自动化)
  4. 数据持久化
  5. request(第三方)
  6. 数据解析:xpath bs4
  7. 数据存储

爬取百度源码

import urllib.request

def load_data():
    url = "http://www.baidu.com/"
    #get的请求
    #http请求
    #response:http相应的对象
    response = urllib.request.urlopen(url)
    print(response) #<http.client.HTTPResponse object at 0x000002046E55AF08>
    #读取内容 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)
    #将字符串类型转换成bytes
    # 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()

爬取包含汉字的网页

import urllib.request
import urllib.parse
import string

def get_method_params():

    url = "http://www.baidu.com/s?wd="
    #拼接字符串(汉字)
    #python可以接受的数据
    #https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3

    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)
    #UnicodeEncodeError: 'ascii' codec can't encode
    # characters in position 10-11: ordinal not in range(128)
    #python:是解释性语言;解析器只支持 ascii 0 - 127
    #不支持中文

get_method_params()

爬取字典参数的网页

import urllib.request
import urllib.parse
import string

def get_params():
    url = "http://www.baidu.com/s?"
    params = {
        "wd":"中文",
        "key":"zhang",
        "value":"san"
    }
	 #将字典中的冒号变为等号
    str_params = urllib.parse.urlencode(params)
    print(str_params)
	#wd=%E5%A4%A7%E6%95%B0%E6%8D%AE&key=zhang&value=san
    final_url = url+str_params
    #将带有中文的url 转译成计算机可以识别的url
    end_url = urllib.parse.quote(final_url,safe=string.printable)
    response = urllib.request.urlopen(end_url)
    data = response.read().decode("utf-8")
    print(data)
    # 将数据写入文件
    with open('zhangsan.html', 'w', encoding='utf-8')as f:
        f.write(data)

get_params()



知识点总结

python爬取的类型:str和bytes

如果爬取回来的是bytes类型:但是你写入的时候需要字符串 decode(“utf-8”)

#将bytes类型转换成字符串
byte_name = b"baidu"
print(byte_name)#b'baidu'
bytes_name =byte_name.decode("utf-8")
print(bytes_name)#baidu

如果爬取过来的是str类型:但你要写入的是bytes类型 encode("“utf-8”)

    #将字符串类型转换成bytes
    str_name = "baidu"
    bytes_name =str_name.encode("utf-8")
    print(bytes_name)

将数据写入文件

with open("baidu.html","w",encoding="utf-8")as f:
#baidu.html是要写入的文件名,自动创建
        f.write(data)

将包含汉字的网址进行转译

#网站拼接(以下两个包必须有)
import urllib.parse
#import urllib 这样写也不可以
import string
url = "http://www.baidu.com/s?wd="
name = "美女"
final_url = url+name
print(final_url)#http://www.baidu.com/s?wd=美女
#网址里面包含了汉字;ascii是没有汉字的;url转译
#python:是解释性语言;解析器只支持 ascii 0 - 127
#不支持中文
#将包含汉字的网址进行转译
encode_new_url = urllib.parse.quote(final_url,safe=string.printable)
print(encode_new_url)  # http://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3

将冒号变为等号

import urllib.request
import urllib.parse
import string

url = "http://www.baidu.com/s?"
params = {
        "wd":"中文",
        "key":"zhang",
        "value":"san"
        }
# 将字典中的冒号变为等号
str_params = urllib.parse.urlencode(params)
print(str_params) #wd=%E5%A4%A7%E6%95%B0%E6%8D%AE&key=zhang&value=san
final_url = url+str_params
#将带有中文的url 转译成计算机可以识别的url
end_url = urllib.parse.quote(final_url,safe=string.printable)
print(end_url)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sparky*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值