爬取拉钩(Selenium + pyquery + MongoDB)
When one can see no future, all one can do is the next right thing. ——《冰雪奇缘2》
如果看不清未来,就走好当下的路。
抓取目标
利用Selenium抓取拉钩Python相关职位并用pyquery解析得到Python相关职位的职位名称、所在城市、薪资、需要经验、教育程度以及公司名称,并将其保存到MongoDB。
思路分析
既然准备使用Selenium那我们就全程让他模拟人的行为去进行一些操作。初步思路如下:
站点分析
站点的搜索框以及搜索按钮如下:
进入职位详情页后,我们可以发现每一个职位都对应一个 li 标签中。
点击其中一个 li 标签,可以看到职位的详细信息。
最后我们查看一下"下一页"按钮的信息
初始化代码
首先构造一个WebDriver对象,使用的是浏览器Chrome,然后模拟人的行为:在搜索框中输入想要搜索的职位,然后点击搜索。初始化MongoDB,首先创建了一个MongoDB连接对象,然后指定了Collection的名称。
1234567891 ...
Python数据储存(TXT、JSON、CSV)
Do you take anyone else’s word about what is right and wrong. ——《21座桥》
不要人云亦云。
语法
1open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
1234567file : 包含了目标名称的字符串值。mode : 决定了打开文件的模式。默认文件访问模式为只读(r)。buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。 如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。 如果取负值,寄存区的缓冲大小则为系统默认。encoding: 对文件规定打开的编码newline = "":读取文件真正的换行符,在window里面为"\r\n",Linux和Python里面为 ...
KeyError:255--Python3连接MySQL数据库时出错
Despite knowing the journey and where it leads, I embrace it. ——《降临》
即使预见了所有的悲伤,我依然愿意前往。
PS: 连接数据库的代码放在了在最后
在用pymysql连接MySQL8.0的时候出现了以下错误,如图:
查看pymysql版本
查看pymysql是否有新版本
1pip list --outdated # 检查哪些包需要更新
发现有新版本,那就更新试试
12pip install --upgrade packagename # pip升级指定包,packagename为需要升级的包名conda update packagename # Anaconda用户使用此命令
再查看一下pymysql的版本,发现已经从0.7.10升级到了0.9.3
让我们再次执行一下刚才的代码,发现已经可以了。
Python3使用pymysql连接MySQL数据库
12345678910import pymysqldb = pymysql.connect(h ...
爬取猫眼电影Top100
For what it’s worth, it’s never too late. ——《返老还童》
有意义的事,什么时候做都不迟。
最近因为新型冠状病毒,在家宅着实在无聊,想着找些电影看。于是乎…
站点分析
我们需要抓取的目标站点为 https://maoyan.com/board/4 ,打开之后便可以查看榜单。如下图,排名第一的电影是霸王别姬。
将网页滑到最下方,发现有分页,点击切换到第2页,观察URL的变化。发现页面的URL变成了 https://maoyan.com/board/4?offset=10 ,如下图:
比之前的URL多了一个offset参数,而目前显示的结果是排名11 ~ 20的电影,初步推断这是一个偏移量的参数。再点击下一页,offset参数变成了20,显示的结果是排名21 ~ 30的电影。多次切换页码offset都有改变,由此得出规律,offset代表偏移量值,如果偏移量为n,则显示的是排名n+1 ~ n+10的电影。也就是说Top100我们只需要分开请求10次即可,而10次的参数分别设置为0、10、20…90即可。
抓取单页源码
1234 ...
CentOS普通用户添加sudo权限
Use knowledge to wipe out ignorance. ——《叫我第一名》
要用知识来打败无知。
Ubuntu中默认是禁用了root账户,在安装系统时建立的用户,默认是添加到了sudoers中。在CentOS中,并没有把root之外的用户添加到sudoers中,所以在执行sudo命令时就会出现以下错误:
或者是:
1xxx is not in the sudoers file.This incident will be reported.
既然想要添加权限的用户不在sudoers,那就把它添加进去。
查找sudoers文件
1whereis sudoers
我们发现sudoers这个文件在/etc/sudoers
修改sudoers权限
先看一下sudoers的权限,发现是root下只读权限
1ll /etc/sudoers
那就修改一下吧,切换到root用户,给sudoers文件添加写权限,并查看是否添加成功
123su rootchmod u+w /etc/sudoersll /etc/sudoers
编辑sudoers文件
打开sudoers文件
...
MySQL(一) 连接、选择、查看
It’s never to late to do the right thing. ——《小事》
做正确的事永远都不会迟。
终端命令行连接MySQL
1mysql -h 主机名 -u 用户名 -P 端口 -p
1234-h: 主机名,表示要连接数据库的主机名或IP;如果是连接到本地MySQL服务器,为localhost-u: 用户名,表示要连接的数据库名-P: 端口,表示要连接的数据库的端口,默认是3306,可以不写,但如果使用的不是默认端口,则必须指明-p: 密码,表示要连接的数据库的密码,可以直接输在-p后面,但是这样明文输入密码不安全,建议在回车之后,换行输入密码
如果你在自己的本机上安装了MySQL并且没有修改默认端口3306,那么通过命令行连接本机的MySQL就不用指定主机名和端口号了,可以直接采用下面的连接方式
选择数据库
在操作数据库之前,必须要确定使用的是哪一个库;在最初连接到MySQL的时候,没有任何数据库打开供你使用;当用 CREATE DATABASE 语句创建数据库之后,该数据库不会自动成为当前数据库。这些情况都需要USE来指定当前数据库。其语法格式为:
...
Linux常用命令(四) cat :直接查看文件内容
Maybe sometimes good can come from bad. ——《金翅雀》
有时候,塞翁失马焉知非福。
语法
1cat [-AbeEnstTuv] filename
选项与参数:
123456789-n : 从1开始对所有输出的行数编号,包括空白行。-b : 与-n雷类似,列出行号,但仅针对非空白行做行号显示,空白行不标行号。-s : 当遇到有连续两行以上的空白行,就代换为一行的空白行。-v : 列出一些看不出来的特殊字符。-E : 将结尾用$显示出来。-T : 将[Tab]按键用^T显示出来。-A : 等价于-vET,可列出一些非空白的特殊字符。-e : 等价于-eV选项-t : 等价于-vT选项
例一:查看/etc/issue这个文件的内容
例二:承接例一,如果需要打印行号?
例三:承接例一,如果需要打印行号?(空白行不加)
例四:将/etc/man_db.info的内容完整显示出来(包含特殊字符)
注:由于这个文件还是很长的,所以我只截取了一部分。
例五:tac反向输出
和例一相比,tac是将cat反转过来。也就是说:cat是由第一行到最后 ...
Linux常用命令(三) mv:移动
Tell yourself, “I am worthy. I can do this. I have what it takes”. ——《史努比:花生大电影》
告诉你自己:“我很棒,我能做到,我有成功所必要的条件”。
语法
12mv [-fiu] source destinationmv [options] source1 souce2 souce3 ... directory
选项与参数:
123-f :force强制的意思,如果目标文件已经存在,不会询问直接覆盖。-i :若目标文件(destination)已经存在,会先询问是否覆盖。-u :若目标文件已经存在,且source比较新,才会更新
例一:复制一个文件,建立一个目录,将文件移动到目录中。
将某个文件移动到某个目录去,就是这样做。
例二:将刚刚的目录名称更名为mvtest2.
在Linux下面还有个有趣的命令,为rename,该命令专职进行多个文件名的同时命名,并非针对单一文件修改,与mv不同,有兴趣的话,请man rename。
例三:再建立两个文件,再全部移动到/tmp/mvtest2中。
注意:如 ...
Linux常用命令(二) rm:删除
You can do anything you put your mind to. ——《惊涛飓浪》
世上无难事,只怕有心人。
语法
1rm [rif] 文件或目录
选项与参数
123-f :就是force(暴力)的意思,忽略不存在的文件,即使目标属性为只读,也直接删除,不会发出警告信息。-i :交互模式,删除前会询问使用者是否操作。-r :递归删除,常用与目录的删除,这是高危选项。
例一:将在cp例子中建立的bashrc删除掉
加上-i的选项会主动询问,避免删除错误的文件。
例二:利用通配符*,将/tmp下面开头为bashrc的文件全部删除。
*代表的是0到无穷大。因为加入了-i选项,所以每删除一个文件前都会进行询问。
例三:将在cp例子中创建的/tmp/etc/这个目录删除掉。
直接使用rmdir或者rm是删不掉非空的文件夹的,这个时候-r就可以用到了。
例四:删除一个开头是-的文件
touch这个命令可以创建一个空文件。第三行第五列为0,所以这是一个空文件。第四行因为"-“的选项,被系统误判了。不过好在第六行新的bash给了我们建议。其实还有一 ...
Linux常用命令(一) cp:复制
You’ve worked harder than everyone who’s ever doubted you. ——《高材生》
你要比任何曾经质疑过你的人都更努力。
语法
12cp [-adfilprsu] 源文件(source) 目标文件(destination)cp [options] source1 souce2 souce3 ... directory
选项与参数
123456789-a : 相当于dpr参数组合,至于dpr请参考下列说明;(常用)-d : 若源文件为链接文件的属性(link file),则复制链接文件属性而不是文件本身;-f : 若目标文件已经存在,则直接覆盖且没有提示;-i : 与-f参数相反,即如果目标文件存在,会询问用户是否覆盖;(常用)-l : 进行硬链接(hard link)的链接文件创建,而不是复制本身;-p : 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性;(备份常用)-r : 递归复制,用于目录的复制操作;(常用)-s : 软链接(不支持目录),亦称“快捷方式”文件;-u : 目标文件比源文件旧才可以更新,或目标文件 ...
