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. 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 可观测性之分布式追踪

    概述 分布式追踪是一种跟踪应用程序请求流经不同服务(如前端.后端.数据库等)的过程.它是一个强大的工具,可以帮助您了解应用程序的工作原理并调试性能问题. Quickwit 是一个用于索引和搜索非结构化 ...

  2. React函数式组件避免无用渲染的方案

    在class组件中可以使用shouldComponentUpdate钩子函数,但是函数式组件中是没有这种钩子函数的,那么在函数式组件中来达到类似的效果呢? 答案是:React.Memo,如以下使用案例 ...

  3. sublime text2自动编译编译less文件为css,并让less文件高亮的两种方法

    方法一:通过命令安装 1.打开sublime,ctrl+shift+p打开命令面板,找到package control:install Package,然后选择less2css,回车.2.继续ctrl ...

  4. CSS – Sass & SCSS

    前言 CSS 代码多了就不好管理了, 这是它语法先天的不足. Sass 就是加强它语法的, Sass 为 CSS 引入了一些 JS 语言的特性, 比如 variable, function, para ...

  5. QT QML实用效果之实现页面切换效果

    简介 本文介绍了如何使用QT QML和JavaScript实现页面动态加载和切换的效果. 文章目录 效果 JavaScript代码:butianyun.js文件 QML代码:主页面 页面A QML代码 ...

  6. mac M1,M2,M3芯片踩坑 nodejs ruby brew

    问题&解决方法 先说解决方法, 感兴趣的可以了解事情的经过, 也许我描述的问题不专业, 但确实解决了当下的问题, 欢迎留言讨论 这里主要是两个问题, 一个是启用rosetta模式失败, 一个是 ...

  7. Epic Games Launcher 提示 应用程序无法正常启动(0xc000007b)

    事件起因: 在给某同事安装Epic Games Launcher报错, 提示 应用程序无法正常启动(0xc000007b) 解决办法: 用DirectX修复工具扫一下,修复一下C++插件,一般是由于 ...

  8. 国产OS 中标麒麟下 C# 桌面应用开发环境搭建笔记

    1.中标麒麟 7.0 x86 桌面版 默认安装创建用户时,如果没勾选 root 用户使用相同的口令,那么安装完成以后,root 是没有设置口令的,通过 sudo passwd root 输入当前普通用 ...

  9. 2022年6月中国数据库排行榜:TiDB卷土重来摘桂冠,达梦蛰伏五月夺探花

    排行榜风云又起,各产品墨坛论剑.2022年6月的 中国数据库流行度排行榜 再掀风云,6月排行榜共有231个数据库参与排名,两名新成员的加入,注入了新活力.本月排行榜用一句话可以概括为:TiDB卷土重来 ...

  10. AtCoder Beginner Contest 371(ABCDE)

    A 个人直接硬解,讨论情况也并不复杂 代码: #include<bits/stdc++.h> #define int long long using namespace std; cons ...