Python网络爬虫之requests模块(1)

引入

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

今日概要

基于requests的get请求

基于requests模块的post请求

基于requests模块ajax的get请求

基于requests模块ajax的post请求

综合项目练习:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

知识点回顾

常见的请求头

常见的相应头

https协议的加密方式

今日详情

  • 基于如下5点展开requests模块的学习

    什么是requests模块

    requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。

    为什么要使用requests模块

    因为在使用urllib模块的时候,会有诸多不便之处,总结如下:

    手动处理url编码

    手动处理post请求参数

    处理cookie和代理操作繁琐

    ......

    使用requests模块:

    自动处理url编码

    自动处理post请求参数

    简化cookie和代理操作

    ......

    如何使用requests模块

    安装:

    pip install requests

    使用流程

    指定url

    基于requests模块发起请求

    获取响应对象中的数据值

    持久化存储

    通过5个基于requests模块的爬虫项目对该模块进行学习和巩固

    基于requests模块的get请求

    需求:爬取搜狗指定词条搜索后的页面数据

    基于requests模块的post请求

    需求:登录豆瓣电影,爬取登录成功后的页面数据

    基于requests模块ajax的get请求

    需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据

    基于requests模块ajax的post请求

    需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据

    综合练习

    需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81/xk/
  • 代码展示

    需求:爬取搜狗指定词条搜索后的页面数据

    import requests

    import os

指定搜索关键字

word = input('enter a word you want to search:')

自定义请求头信息

headers={

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

}

指定url

url = 'https://www.sogou.com/web'

封装get请求参数

prams = {

'query':word,

'ie':'utf-8'

}

发起请求

response = requests.get(url=url,params=param)

获取响应数据

page_text = response.text

with open('./sougou.html','w',encoding='utf-8') as fp:

fp.write(page_text)

请求载体身份标识的伪装:

User-Agent:请求载体身份标识,通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。可以通过判断该值来获知该请求的载体究竟是基于哪款浏览器还是基于爬虫程序。

反爬机制:某些门户网站会对访问该网站的请求中的User-Agent进行捕获和判断,如果该请求的UA为爬虫程序,则拒绝向该请求提供数据。

反反爬策略:将爬虫程序的UA伪装成某一款浏览器的身份标识。

需求:登录豆瓣电影,爬取登录成功后的页面数据

import requests

import os

url = 'https://accounts.douban.com/login'

封装请求参数

data = {

"source": "movie",

"redir": "https://movie.douban.com/",

"form_email": "15027900535",

"form_password": "bobo@15027900535",

"login": "登录",

}

自定义请求头信息

headers={

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

}

response = requests.post(url=url,data=data)

page_text = response.text

with open('./douban111.html','w',encoding='utf-8') as fp:

fp.write(page_text)

需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据

!/usr/bin/env python

-- coding:utf-8 --

import requests

import urllib.request

if name == "main":

#指定ajax-get请求的url(通过抓包进行获取)
url = 'https://movie.douban.com/j/chart/top_list?' #定制请求头信息,相关的头信息必须封装在字典结构中
headers = {
#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
} #定制get请求携带的参数(从抓包工具中获取)
param = {
'type':'5',
'interval_id':'100:90',
'action':'',
'start':'0',
'limit':'20'
}
#发起get请求,获取响应对象
response = requests.get(url=url,headers=headers,params=param) #获取响应内容:响应内容为json串
print(response.text)

需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据

!/usr/bin/env python

-- coding:utf-8 --

import requests

import urllib.request

if name == "main":

#指定ajax-post请求的url(通过抓包进行获取)
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' #定制请求头信息,相关的头信息必须封装在字典结构中
headers = {
#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
} #定制post请求携带的参数(从抓包工具中获取)
data = {
'cname':'',
'pid':'',
'keyword':'北京',
'pageIndex': '1',
'pageSize': '10'
}
#发起post请求,获取响应对象
response = requests.get(url=url,headers=headers,data=data) #获取响应内容:响应内容为json串
print(response.text)

需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

import requests

from fake_useragent import UserAgent

ua = UserAgent(use_cache_server=False,verify_ssl=False).random

headers = {

'User-Agent':ua

}

url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'

pageNum = 3

for page in range(3,5):

data = {

'on': 'true',

'page': str(page),

'pageSize': '15',

'productName':'',

'conditionType': '1',

'applyname':'',

'applysn':''

}

json_text = requests.post(url=url,data=data,headers=headers).json()

all_id_list = []

for dict in json_text['list']:

id = dict['ID']#用于二级页面数据获取

#下列详情信息可以在二级页面中获取

# name = dict['EPS_NAME']

# product = dict['PRODUCT_SN']

# man_name = dict['QF_MANAGER_NAME']

# d1 = dict['XC_DATE']

# d2 = dict['XK_DATE']

all_id_list.append(id)

#该url是一个ajax的post请求

post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'

for id in all_id_list:

post_data = {

'id':id

}

response = requests.post(url=post_url,data=post_data,headers=headers)

#该请求响应回来的数据有两个,一个是基于text,一个是基于json的,所以可以根据content-type,来获取指定的响应数据

if response.headers['Content-Type'] == 'application/json;charset=UTF-8':

#print(response.json())

#进行json解析

json_text = response.json()

print(json_text['businessPerson'])

Python网络爬虫之requests模块1的更多相关文章

  1. 04.Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  2. Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  3. 04,Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  4. 06.Python网络爬虫之requests模块(2)

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  5. Python网络爬虫之requests模块(2)

    session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 有些时候,我们在使用爬 ...

  6. Python网络爬虫之requests模块

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  7. 网络爬虫之requests模块,自动办公领域之openpyx模块

    一.第三方模块的下载与使用 第三方模块:别人写的模块,一般情况下功能都特别强大    我们如果想使用第三方模块,第一次必须先下载,后面才可以反复使用(等同于内置模块) 下载第三方模块的方式 1. pi ...

  8. 网络爬虫之requests模块的使用+Github自动登入认证

    本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入:   我们先来看如下的例子,初步体验下requests模块的使用: ...

  9. Python学习---爬虫学习[requests模块]180411

    模块安装 安装requests模块 pip3 install requests 安装beautifulsoup4模块 [更多参考]https://blog.csdn.net/sunhuaqiang1/ ...

  10. Python网络爬虫之BeautifulSoup模块

    一.介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮 ...

随机推荐

  1. Parallels Desktop 虚拟机网络地址

    bridge100 是宿主机在共享网络中的地址 bridge101 是宿主机在 Host-Only 网络中的地址 查询宿主机 IP 地址 $ ip addr show # 共享网络(默认) bridg ...

  2. 四,分析Spring Boot底层机制(Tomcat 启动分析+Spring容器初始化+Tomcat如何关联 Spring 容器) 以及个人编写启动 Tomcat

    四,分析Spring Boot底层机制(Tomcat 启动分析+Spring容器初始化+Tomcat如何关联 Spring 容器) 以及个人编写启动 Tomcat @ 目录 四,分析Spring Bo ...

  3. JS的可选链操作符(?.)与双问号(??),你用到了吗?

    可选链操作符(?.) 以前一般这样使用: let nestedProp = obj.first && obj.first.second; 或者这样: let temp = obj.fi ...

  4. CA-TCC: 半监督时间序列分类的自监督对比表征学习《Self-supervised Contrastive Representation Learning for Semi-supervised Time-Series Classification》(时间序列、时序表征、时间和上下文对比、对比学习、自监督学习、半监督学习、TS-TCC的扩展版)

    现在是2023年11月27日,10:48,今天把这篇论文看了. 论文:Self-supervised Contrastive Representation Learning for Semi-supe ...

  5. OData – 坑

    前言 OData 有很多很多的坑,我的主张是能少用一样是一样,比如 Batch Processing 不要用,Inheritance 不要用,除了 GET 其它 PUT POST DELETE 都不要 ...

  6. Angular 18+ 高级教程 – EventManagerPlugin & Hammer.js Gesture

    前言 今天来揭秘一下 Angular 的 Event Listening,看看它底层有什么好玩的地方. (keydown.enter) 语法 在 Component 组件 の Template Bin ...

  7. SQL Server – 我常用语句

    前言 旧没用又忘记了, 又没有 intellisense, 记入这里吧. Reset Auto Increment DBCC CHECKIDENT ('TableName'); -- check cu ...

  8. 微信小程序开发疑难

    1.开发者工具在小程序webview中注入wx时会提示token过期,但真机正常

  9. [OI] 交互 | pipe

    关于如何在本地实现交互 管道 Linux 内置了一种管道操作,可以方便地把 \(A\) 程序的输出和 \(B\) 程序的输入连接起来,只需要以下指令: A | B 此代码行的意思是:同时运行 \(A\ ...

  10. Python | os.path.join() method

    Python中的os.path.join()方法可以连接一个或多个路径组件. 此方法将各个路径组成部分,与每个非空部分路径组成部分恰好用一个目录分隔符(" /")连接起来. 如果要 ...