python学习笔记之爬虫(一) 初识爬虫丨【生长吧!Python】

举报
菜鸟级攻城狮 发表于 2021/07/06 20:31:15 2021/07/06
【摘要】 python学习笔记之爬虫(一) 初识爬虫

第一章 初识爬虫

### 第一章 ###
''' HTTP协议
HTTP协议一般把消息分为三大块内容,无论时请求还是相应都是三块内容。
请求:
    请求行 -> 请求方式(get/post) 请求url地址 协议
    请求头 -> 放一些服务器要使用的附加信息
    请求体 -> 一般放一些请求参数
响应:
    状态行 -> 协议 状态码
    响应头 -> 放一些客户端要使用的附加信息
    响应体 -> 服务器返回的真正客户端要使用的内容(HTML, json)

请求头中最常见的一些重要内容(爬虫需要)
    1User-Agent:请求载体的身份标识(用啥发送的请求)
    2Referer:防盗链(这次请求是从哪个页面来的?反爬会用到)
    3cookie:本地字符串数据信息(用户登录信息,反爬的token)
响应头中的一些重要内容:
    1cookie:本地字符串数据信息(用户登录信息,反爬的token)
    2、各种神奇的莫名其妙的字符串(这个需要经验了,一般都是token字样,防止各种攻击和反爬)
    
请求方式:
    GET:显式提交
    
    POST:隐式提交
'''



''' Requests入门 '''
'''
视频链接:get方法使用url获取数据
案例1

安装requests
    pip install requests
使用国内源
清华源:
临时使用:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
设为默认:
    升级pip到最新的版本(>=10.0.0)后进行配置:
    pip install pip -U
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    如果您到pip默认源的网络连接较差,临时使用本镜像站来升级pip
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
'''
import requests

query = input('输入一个你喜欢的明星:')
# get方法使用url获取数据
url = f'https://www.sogou.com/web?query={query}'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4043.400'
}

resp = requests.get(url, headers=headers)   # 处理一个小反爬,resp=respponse

print(resp) # <response [200]>
print(resp.text)    # 拿到页面源代码



'''

post方法获取数据
案例2
'''
import requests

url = 'https://fanyi.baidu.com/sug'

s = input('请输入你要翻译的英文单词:')
data = {
    'kw': s
}


# 发送post请求,发送的数据必须放在字典中,通过data参数进行传递
resp = requests.post(url, data=data)
print(resp.text)
# {"errno":0,"data":[{"k":"dog","v":"n. \u72d7; \u8e69\u811a\u8d27; \u4e11\u5973\u4eba; \u5351\u9119\u5c0f\u4eba v. \u56f0\u6270; \u8ddf\u8e2a"},{"k":"DOG","v":"abbr. Data Output Gate \u6570\u636e\u8f93\u51fa\u95e8"},{"k":"doge","v":"n. \u5171\u548c\u56fd\u603b\u7763"},{"k":"dogm","v":"abbr. dogmatic \u6559\u6761\u7684; \u72ec\u65ad\u7684; dogmatism \u6559\u6761\u4e3b\u4e49; dogmatist"},{"k":"Dogo","v":"[\u5730\u540d] [\u9a6c\u91cc\u3001\u5c3c\u65e5\u5c14\u3001\u4e4d\u5f97] \u591a\u6208; [\u5730\u540d] [\u97e9\u56fd] \u9053\u9ad8"}]}
print(resp.json())  # 将服务器返回的内容直接处理成json() => dict
# {'errno': 0, 'data': [{'k': 'dog', 'v': 'n. ; 蹩脚货; 丑女人; 卑鄙小人 v. 困扰; 跟踪'}, {'k': 'DOG', 'v': 'abbr. Data Output Gate 数据输出门'}, {'k': 'doge', 'v': 'n. 共和国总督'}, {'k': 'dogm', 'v': 'abbr. dogmatic 教条的; 独断的; dogmatism 教条主义; dogmatist'}, {'k': 'Dogo', 'v': '[地名] [马里、尼日尔、乍得] 多戈; [地名] [韩国] 道高'}]}



'''
视频链接:
 案例3
爬虫三大件:url、请求方式(get/post)Query string parameters
'''
import requests

url = 'https://movie.douban.com/j/chart/top_list'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4043.400'
}

# 重新封装参数
params = {
    'type': '24',
    'interval_id': '100:90',
    'action': '',
    'start': '0',
    'limit': '20',
}

# 发送请求,获取响应
resp = requests.get(url, headers=headers, params=params,)

print(resp.request.url)
# https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20
print(resp.text) # 空白,为什么呢?需要尝试寻找原因,因为没有headers
print(resp.request.headers)
# {'User-Agent': 'python-requests/2.25.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
# 添加headers字典、headers=headers之后
print(resp.text)    # 拿到了数据,但需进一步清洗
print(resp.json())  # 拿到了json()格式的数据

## 补充:关闭resp连接 
resp.close()    # 关掉resp


【生长吧!Python】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/278897

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。