Request:

Test1(基本属性:POST):

代码1:

import requests

# 发送POST请求
data = { }
response = requests.post(url, data=data)

POST请求

Test2(auth认证):

代码2:

import requests

# 发送POST请求
data = { }
response = requests.post(url, data=data) #内网 => 需要认证
auth = (user, pwd)
response = requests.get(url, auth=auth)

auth认证

Test3(添加代理IP):

代码3:

import requests

# 1.请求url
url = 'http://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', }
free_proxy = {
'http': '58.249.55.222:9797'
}
response = requests.get(url=url, headers=headers, proxies=free_proxy)
print(response.status_code)

添加代理IP

Test4(SSL认证):

代码4:

import requests

url = 'https://www.12306.cn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', }
response = requests.get(url=url, headers=headers)
data = response.content.decode()
with open('03-ssl.html', 'w', encoding='utf-8')as f:
f.write(data)

错误示例

错误原因:

https是有第三方CA证书认证的
但12306虽然是https,但是他不是CA证书,他是自己颁布的证书
解决方法:
告诉web的服务器忽略证书访问

错误原因及解决方法

正确操作:

import requests

url = 'https://www.12306.cn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', }
response = requests.get(url=url, headers=headers, verify=False)
data = response.content.decode()
with open('03-ssl.html', 'w', encoding='utf-8')as f:
f.write(data)

忽略证书进行SSL认证

返回:

Test5(Cookies):

以抓取https://www.yaozh.com/为例

代码5:

import requests

# 请求数据url
member_url = 'https://www.yaozh.com/mamber'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36', }
# cookies字符串
cookies = 'acw_tc=2f624a2116146683053267637e08ee667240e1e39bfc4dbbbd0b8a8f33eaa4; PHPSESSID=em18pu35k89loei7glff6tthu5; _ga=GA1.2.1727298837.1614668307; _gid=GA1.2.781607072.1614668307; _gat=1; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1614668307; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1614668313; yaozh_logintime=1614668314; yaozh_user=1038868%09s1mpL3; yaozh_userId=1038868; yaozh_jobstatus=kptta67UcJieW6zKnFSe2JyYnoaSZ5htnZqdg26qb21rg66flM6bh5%2BscZdyVNaWz9Gwl4Ny2G%2BenofNlKqpl6XKppZVnKmflWlxg2lolJeaA7663ea03b06b64c50D898E7C9Aa493SkZSblWmHcNiemZtVq56lloN0pG2SaZ%2BGam2SbGiZnZWSmZyYaodw4g%3D%3Dc0addf8502ad2cb2f15b3ee2b0e1386b; db_w_auth=854448%09s1mpL3; UtzD_f52b_saltkey=oZ3HIEZl; UtzD_f52b_lastvisit=1614664715; UtzD_f52b_lastact=1614668315%09uc.php%09; UtzD_f52b_auth=25786v5G66Jeq3x5p14pj246attR7pdjk5X409nOsIqKeaEypUvH%2BA1LTN4dNrChFQS1hmPQNfLGoyIxAD8PRqgk4bA; yaozh_uidhas=1; yaozh_mylogin=1614668317; acw_tc=2f624a2116146683053267637e08ee667240e1e39bfc4dbbbd0b8a8f33eaa4'
# 但需要的是cookies的字典类型
cookies_dict = { }
cookies_list = cookies.split('; ')
for cookie in cookies_list:
cookies_dict[cookie.split('=')[0]] = cookie.split('=')[1] response = requests.get(url=member_url, headers=headers, cookies=cookies_dict)
data = response.content.decode()
with open('05-cookie.html', 'w', encoding='utf-8')as f:
f.write(data)

Cookies - 代码传参登陆

返回:

由返回页面可知,登录成功。

Test6(cookies - session):

以抓取https://www.yaozh.com/为例

代码6:

Cookies - 代码带着cookie去请求数据

返回:

由返回页面可知,登录成功。

数据解析:

Test1(正则表达式 - 贪婪模式):

代码1:

import re

# 贪婪模式:从开头匹配到结尾
# 非贪婪模式:使用?
one = 'mdfjiefhuehfgieufn213431241234n'
pattern = re.compile('m(.*)n')
result = pattern.findall(one)
print(result)

贪婪模式

返回1:

['dfjiefhuehfgieufn213431241234']

Test2(正则表达式 - 费贪婪模式):

代码2:

import re

# 贪婪模式:从开头匹配到结尾
# 非贪婪模式:使用?
one = 'mdfjiefhuehfgieufn213431241234n'
pattern = re.compile('m(.*?)n')
result = pattern.findall(one)
print(result)

返回2:

['dfjiefhuehfgieuf']

Test3(正则表达式 - 匹配换行符):

代码3:

import re

# .除了换行符之外的匹配
one = """
maiwgdyuwagdwyadg
1234567612121134n
"""
pattern = re.compile('m(.*)n')
result = pattern.findall(one)
print(result)

不匹配换行符

返回3:

[]

代码4:

import re

# .除了换行符之外的匹配
one = """
maiwgdyuwagdwyadg
1234567612121134n
"""
pattern = re.compile('m(.*)n', re.S)
result = pattern.findall(one)
print(result)

匹配换行符

返回4:

代码5:

import re

# .除了换行符之外的匹配
one = """
maiwgdyuwagdwyadg
1234567612121134N
"""
pattern = re.compile('m(.*)n', re.S | re.I)
result = pattern.findall(one)
print(result)

忽略大小写

返回5:

Test4(正则表达式 - 纯数字的正则):

代码6:

import re

# 纯数字的正则 \d 0 - 9之间的一个数
pattern = re.compile('^\d+$')
one = '1234' # 匹配判断的方法
result = pattern.match(one) print(result.group())

返回:

1234

Test5(正则表达式 - 范围运算):

代码7:

import re

# 范围运算 [123]  [1-9]
one = '798345' pattern = re.compile('[1-9]')
result = pattern.findall(one)
print(result)

返回:

['7', '9', '8', '3', '4', '5']

注:

  • match:从头匹配,匹配一次
  • search:从任意位置,匹配一次
  • findall:查找符合正则的内容
  • sub:替换字符串
  • split:拆分

Python爬虫学习笔记(四)的更多相关文章

  1. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

  2. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  3. Python爬虫学习笔记(三)

    Cookies: 以抓取https://www.yaozh.com/为例 Test1(不使用cookies): 代码: import urllib.request # 1.添加URL url = &q ...

  4. 一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!

    前言 还记得是大学2年级的时候,偶然之间看到了学长在学习python:我就坐在旁边看他敲着代码,感觉很好奇.感觉很酷,从那之后,我就想和学长一样的厉害,就想让学长教我,请他吃了一周的饭,他答应了.从此 ...

  5. python爬虫学习笔记

    爬虫的分类 1.通用爬虫:通用爬虫是搜索引擎(Baidu.Google.Yahoo等)“抓取系统”的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 简单来讲就是尽可 ...

  6. Python、pip和scrapy的安装——Python爬虫学习笔记1

    Python作为爬虫语言非常受欢迎,近期项目需要,很是学习了一番Python,在此记录学习过程:首先因为是初学,而且当时要求很快速的出demo,所以首先想到的是框架,一番查找选用了Python界大名鼎 ...

  7. 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结

    1. Beautiful Soup简介     Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...

  8. Python爬虫学习笔记——豆瓣登陆(一)

    #-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import ...

  9. Python爬虫学习笔记-1.Urllib库

    urllib 是python内置的基本库,提供了一系列用于操作URL的功能,我们可以通过它来做一个简单的爬虫. 0X01 基本使用 简单的爬取一个页面: import urllib2 request ...

随机推荐

  1. 【noi 2.6_1481】Maximum sum(DP)

    题意:求不重叠的2段连续和的最大值. 状态定义f[i]为必选a[i]的最大连续和,mxu[i],mxv[i]分别为前缀和后缀的最大连续和. 注意:初始化f[]为0,而max值为-INF.要看好数据范围 ...

  2. Codeforces Round #678 (Div. 2) C. Binary Search (二分,组合数)

    题意:有长度\(n\)的序列,让你构造序列,使得二分查找能在\(pos\)位置找到值\(x\).问最多能构造出多少种排列? 题解:题目给出的\(pos\)是固定的,所以我们可以根据图中所给的代码来进行 ...

  3. hdu2639 Bone Collector II

    Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in the ...

  4. Filebeat 日志收集

    Filebeat 介绍 Filebeat 安装 # 上传代码包 [root@redis03 ~]# rz filebeat-6.6.0-x86_64.rpm # 安装 [root@redis03 ~] ...

  5. LINUX - pthread_mutex_lock

    原文链接:https://www.cnblogs.com/fengbohello/p/7571722.html 互斥的概念 在多线程编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性. 每个对 ...

  6. 获取txt编码方式

    在操作txt的时候,有时会出现乱码,这是因为没有使用正确的编码方式来操作txt,我们需要先获取txt的编码方式,再进行读写操作.下面是获取txt编码的方法: /// <summary> / ...

  7. hihocoder 1631

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are many homeless cats in PKU campus. They are all happy ...

  8. CSS 解决Float后塌陷问题

    当父级元素没有设定高度时候,而子集元素设定float类型时候,此时父级元素不能靠子集元素撑起来,所以就形成了塌陷: 示例分析 **1.Float之前的效果** <!DOCTYPE html> ...

  9. git-reset All In One

    git-reset All In One git 撤销 merge $ git checkout feature-sentry $ git pull $ git checkout dev $ git ...

  10. URL parser All In One

    URL parser All In One const url = new URL(`https://admin:1234567890@cdn.xgqfrms.xyz:8080/logo/icon.p ...