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. P1108 低价购买(DP)

    题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买".每次你购买一支股 ...

  2. hdu4217 Data Structure?

    Problem Description Data structure is one of the basic skills for Computer Science students, which i ...

  3. JavaScript——四

    引用案例:事件只能执行一次 array里面都是事件对象 点击box3区域时,则会有事件冒泡现象,即:box3响应后,box2(比他大一节)的区域,box1(比box2大一级)相应出现响应事件现象 捕获 ...

  4. C# EventWaitHandle类解析

    EventWaitHandle 类用于在异步操作时控制线程间的同步,即控制一个或多个线程继行或者等待其他线程完成. 构造函数 EventWaitHandle(bool initialState, Ev ...

  5. BIM轻量化——浏览器展示

    此篇博客仅为记录,记录钻研过程的零碎思路.         之前考虑过很多可能性,对rvt文件转换格式:.obj.JSON..gltf等等.这些可能性前人一般都尝试过,而且也都做出来了东西.     ...

  6. 牛客网多校第4场 J Hash Function 【思维+并查集建边】

    题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...

  7. 牛客网-Beauty of Trees 【加权并查集】

    锟斤拷锟接o拷https://www.nowcoder.com/acm/contest/119/A锟斤拷源锟斤拷牛锟斤拷锟斤拷 锟斤拷目锟斤拷锟斤拷 It锟斤拷s universally acknow ...

  8. Typescript & classes & public shorthand

    classes & public shorthand Also of note, the use of public on arguments to the constructor is a ...

  9. how to open a terminal in finder folder of macOS

    how to open a terminal in finder folder of macOS shit service demo refs https://lifehacker.com/launc ...

  10. Flutte 什么是Widget,RenderObjects和Elements

    原文 Opacity API文档 有没有想过Flutter如何获取这些小部件并将其实际转换为屏幕上的像素? 您可能已经知道如何使用StatelessWidget和StatefulWidget.但是那些 ...