php技术分享博客|个人php技术博客

php技术博客

记录php相关学习知识及开发示例、疑难问题等,欢迎大家与我联系交流相关技术

centos7服务器版下通过命令行安装virtualbox虚拟机

大家常见都是安装的桌面版virtualbox虚拟机,这次需要在linux终端环境中进行安装运行。之前win电脑安装了虚拟机,虚拟机里面运行centos7环境,里面配置一套软件系统环境,现在想把这个虚拟机环境切换到linux服务器中。下面介绍具体的步骤1、先在本地帮虚拟机环境数据导出,注意网卡获取ip方式改为 dhcp方式,不要设置为固定的ip,放行22端口及安装配置openssh-server服务2、从virtualbox官网下载指定版本的VirtualBox软件,官网下载地址:https://www.virtualbox.org/wiki/Downloads ,如果是6.1及以前的版本,通过 https://www.virtualbox.org/wiki/Download_Old_Builds_6_1VirtualBox 6.1.28 进行下载。如我们下载的是 centos7下VirtualBox 6.1.28版本3、linux服务器安装上一步下载的VirtualBox软件yum install -y VirtualBox-6.1-6.1.28

php 域名指向ip,如何在curl方式下url请求域名使用指定ip地址来访问某个服务器

如果某个域名对应多个ip,即有多台服务器。如何通过curl来访问指定一台服务器的url信息了。我们知道一般使用curl获取url信息的代码如下$url="https://www.phper163.com/"; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_TIMEOUT,5); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $content=curl_exec($ch); echo $content;如果想访问39.99.204.74这个ip服务器的内容了,可以将请求url中域名部分改用ip方式,并加上Host

python中使用csv模块进行csv文件数据读取与写入

python中对csv文件进行读取与写入,可以使用自带的csv模块即可。import csv ''' demo.csv文件内容如下 姓名,手机号 phper163,152*****234 ''' with open('demo.csv','r+',newline='') as f:     reader=csv.reader(f) #默认通过逗号分隔数据,通过参数delimiter来指定分隔字符,如用“t”分隔,使用 delimiter="t"     for i in reader:         print(i) #遍历输出数据     writer=csv.writer(

使用aiohttp库设置代理抓取https页面报错问题解决

有一次通过aiohttp库设置代理抓取https页面报错,错误如下:aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host www.phper163.com:443 ssl:default [参数错误。]不加代理的话,抓取https页面是正常的import asyncio import aiohttp def main():     loop=asyncio.get_event_loop()     url='https://www.phper163.com/getIP.php'     con = aiohttp.TCPConnector(ssl=False)     async with aiohttp.ClientSession(connec

python中使用pycurl库请求获取网页数据

pycurl是一个用c语言编写的libcurl Python实现,功能非常强大,支持操作协议有FTP,HTTP,HTTPS,TELNET等。安装命令:pip install pycurl使用pycurl库开发网页请求步骤:(1)、创建curl实例(2)、设置:setopt操作(3)、执行:perform(4)、获取信息:getinfo下面给出一个具体的例子:import pycurl from io import BytesIO c = pycurl.Curl() c.setopt(pycurl.SSL_VERIFYPEER, 0) c.setopt(pycurl.SSL_VERIFYHOST, 0) c.setopt(pycurl.URL, "https://www.baidu.com/") buffer = BytesIO() buffer_header = BytesIO() c.setopt(pycurl.WRITEHEADER,bu

python3中实现对url链接的编码与解码,将%3A和%2F转换为 : 和 /

使用python进行抓包的时候需要的一个链接,“https%3A%2F%2Fwww.phper163.com%2Flist%2F6.html”,这是一种url编码过的链接,其中“%3A”表示“:”、“%2F”代表“/”。URL为何要编码、解码?为了避免url中有的字符造成歧义问题。例如,url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=php&page=2。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。python3中如何对url进行编码与解码了,使用 urllib库下parse模块。parse.quote()进行url编码,parse.unquote()进行解码from urllib import parse url='http://www.phper163.com/?s=python&page=2' print(parse.quote(url,safe='')) #ur

python3.9版本安装后执行命令提示“ModuleNotFoundError: No module named '_ctypes'”解决

由于django4.0版本需要至少python3.8版本,所以帮服务器的python3的版本由python3.6升级到python3.9。通过官方下载源码,编译安装。安装后执行python3.9命令提示“ModuleNotFoundError: No module named '_ctypes'”这个错误,通过相关搜索得知,python3.7以上版本需要一个新的依赖包libffi-devel,centos系统环境中缺乏这个包。解决方法:(1)、安装 libffi-develcentos下,可以使用命令 yum install libffi-devel -yubuntu下,可以使用命令 sudo apt-get install libffi-dev(2)、重新安装python3版本即可到python3源码安装包下执行命令:make install,重新进行安装安装成功后,重新创建新的python3的软链接

python中lxml下etree库使用css选择器获取指定html元素

之前介绍过etree下使用xpath方式来获取html元素,对不了解xpath规则的人来说有一定的难度,而且写法复杂。基本上了解html代码的,知道一点css选择器的规则。常见的有:直接选择元素,如“p”、选择指定class的元素,如“.intro”、选择指定id的元素,如“#article”。详细搜索参考“css选择器”。那在etree中如何使用css选择器来获取html元素,这里需要用到cssselect第三方库。安装cssselect库命令:pip install cssselect查看是否安装(1)、命令行中执行 pip list,看输出的结果中是否有cssselect(2)、python命令中输入import cssselect,如果没有报错,说明安装成功etree中使用cssselect方式,非常简单,直接使用csselect(css选择器表达式)即可,返回值跟xpath方式是一致的。如from lxml import etree html_doc='hellohello world' doc=etree.HTML

python中解析html获取指定元素信息方法(二)使用BeautifulSoup库

Beautiful Soup是python中一个第三方的HTML即XML的解析库,可以用它来方便地从网页中提取数据。目前最新版本为BeautifulSoup4,已经被移植到bs4当中,在导入时需要from bs4,然后再导入BeautifulSoup。安装命令:pip install beautifulsoup4查看是否安装(1)、命令行中执行 pip list,看输出的结果中是否有beautifulsoup(2)、python命令中输入from bs4 import BeautifulSoup,如果没有报错,说明安装成功BeautifulSoup支持Python标准库中的HTML解析器,也支持第三方的解析器,如lxml解析器。需要单独安装lxml库。一般建议使用lxml解析器,速度快及文档容错能力强。BeautifulSoup库解析html使用:(1)、导入BeautifulSoup库,然后实例化BeautifulSoup对象soup=BeautifulSoup(html_doc,"lxml")(2)、接下来就可以使用find()、find_all()来获取指定的元素soup.fin

python中解析html获取指定元素信息方法(一)使用lxml库

lxml是python中的一个解析库,支持html和xml解析,支持XPath解析方式,而且解析效率非常高。lxml属于第三方库,使用前要安装lxml库。安装命令:pip install lxml查看是否安装(1)、命令行中执行 pip list,看输出的结果中是否有lxml(2)、python命令中输入import lxml,如果没有报错,说明安装成功lxml库解析html使用:(1)、导入lxml库的etree模块,然后使用etree.HTML(htmlcode)方法进行初始化,构造一个XPath解析对象。doc=etree.HTML(html_pagesource)(2)、接下来就可以使用上面获取的对象下xpath()方法来获取指定元素的对象result=doc.xpath("//title")[0] #获取title标签对象print(result.text) #输出标签里面的内容print(result.attrib) #输出标签的属性值,字典类型,如果有 href属性,可调取 print(result.attrib['href'])print(et

Python中使用lxml库提取html标签内容 etree.tostring()不能显示中文,显示乱码解决

最近使用python抓取网页分析html元素数据时,使用lxml库下etree类tostring()方法获取指定元素的html代码,发现输出的结果中汉字部分显示不正常,形如 年,使用html类下tostring()方法是一样的情况。经过查找得知汉字被转换为对应的html字符实体。有下面几种方法解决(1)、使用html库下unescape()函数帮字符串中html字符实体转换为对应的字符,如汉字等(2)、通过分析etree的源码,发现 etree类还有 tounicode()方法,使用这个方法获取,能正常显示汉字(3)、通过分析etree的源码,发现tostring()方法,有 encoding参数值控制汉字是否转换为对应html字符实体,encoding="unicode"设定这个值,返回的是unicode字符串。下面是示例代码:from lxml import etree import requests import html url = 'http://www.phper163.c

python中如何判断变量的类型、判断变量是否为列表的方法

开发中类型变量判断会经常遇到,不确定的情况下直接调用往往会提示类型不符合错误。python中如何判断变量的类型,如判断某个变量是否为列表类型?下面介绍三种方法判断:(1)、python中type()函数可以获取变量的类型,注意这个返回值是对象类型的,如果想要判断的话,可以通过返回值对象的 __name__属性来判断aa=32 print(type(aa).__name__,type(aa).__name__=='int') #输出为 int Truetype()返回值对象的__name__值常见的有:int 整形、float 浮点数、str 字符串、list 列表、tuple 元组、bool 布尔值、set 集合、dict 字典(2)、通过与已知类型的常量进行比较如判断是否为整形,可以用 aa=32 bb="python" print(type(aa)==type(1)) #如果输出为真,则判断变量为整形,其他类型类似,如判断是否为字符串 print(type(bb)==type('hello')

python中如何处理html字符实体转换为字符及互转方式

熟悉html语言的会知道html中有字符实体一说,为了避免解析错误正确显示,html中有些字符要用字符实体替代。常见的有“”大于号用“>”替代,“&”和号用“&”替代,“"”双引号用“"”替代,“ ”空格用“ ”替代等。汉子及特殊字符都可以用对应的字符实体替代。如 “©”表示版权的符号“©”,“中”表示汉子“中”。使用python抓取网页源代码时,经常遇见html中有字符实体。如何转换为正常显示的字符串了,可以使用python中自带的html库下面unescape()函数来处理。import html print(html.unescape('Copyright©2003-2021 python&php 学习')) #输出为:Copyright©2003-2021 python&php 学习如何将字符转换为html字符实体了,可以有两种方法(1)、如果只是要转换“”、“&”、“"”、“'”这几个字符,可以使

使用selenium获取网址所加载所有资源url列表信息

抓取数据时,经常遇到有的数据是通过ajax异步调取的,如何通过selenium获取网址所加载的全部请求url地址了,即我们打开开发者工具里面network中记录的请求url列表,可以参考下面代码# -*- coding=utf-8 -*- import json import time from selenium import webdriver from selenium.webdriver.chrome.options import Options url="http://www.phper163.com/"; chrome_options = Options() #chrome_options.add_argument('--no-sandbox') #chrome_options.add_argument('--disable-dev-shm-usage') #chrome_options.add

mysql中索引类型Btree和Hash的区别以及使用场景

mysql中支持两种索引类型,一种是btree类型,一种是hash类型。为什么我们添加索引的时候没有要求设置索引类型了,因为有默认值。Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。1、BTree类型BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如:select * from user where name like ‘jack%’;2、Hash类型Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。但为什么我们使用BTree比使用Hash多呢?主要Hash本身由于其特殊性,也带来了很多限制和弊端:Hash索引仅仅能满足“=”,“IN”,“<=>”查询,不能使用范围查询。联合索引中,Hash索引不