准备工作:
1、下载Python3.6.5 https://www.python.org/downloads/
2、下载IDA工具PythonCharm https://www.jetbrains.com/pycharm/download/#section=windows
3、配置环境变量
安装好Python后找到快捷键,右键点属性,找到目标路径复制
我的电脑,右键-属性-高级-环境变量-系统变量-修改Path,在变量值的最后面加一个;然后把目标路径复制进去
设置好环境变量后测试一下,Win+R,输入cmd,在输入python,如图,就证明已经设置好了环境变量
输一个简单的指令 print("hello"),就可以在控制台打印出hello这句话.
好了准备工作,我们打开pyCharm编译器
首次使用
1、点击Create New Project.
2、输入项目名、路径、选择python解释器。如果没有出现python解释器
3、选择python解释器。可以看到,一旦添加了python解释器,pycharm就会扫描出你已经安装的python扩展包,和这些扩展包的最新版本。(估计是pycharm连接了pypi)
4、点击OK之后,就会创建一个空项目,里面包含一个.idea的文件夹,用于pycharm管理项目。
5、好了,写一个新的项目尝试一下pycharm吧!新建一个py文件,
如图1:
那我们就以爬吾爱破解编程区的帖子为例吧:
1.首先找到地址https://www.52pojie.cn/forum-24-1.html
2.我用的谷歌浏览器,按F12,右边Elements的<body>标签里找我们需要的帖子链接和名字,
如图2:
那开始写代码:
import urllib.request
import re
先导入两个模块解释下这两个模块,新人朋友们了解下,其他有基础的朋友有兴趣可以深入研究下
urllib.request
原地址:
https://docs.python.org/3.5/library/urllib.request.html#module-urllib.request
urllib.request — 为打开url提供的可扩展类库源代码:Lib / urllib / request.pyurllib.request模块定义了方法和类,帮助打开url(主要是HTTP)在一个复杂的世界——基本和摘要式身份验证,重定向,cookies等等。
re模块
re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
详细请看:http://www.runoob.com/python/python-reg-expressions.html
继续写代码
url="https://www.52pojie.cn/forum-24-1.html"#爬的地址
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
print("page")
我们来打印下page里面的内容
是不是和图2网页里面的内容一模一样的
这里转码我讲下,'gbk'是该网页的编码类型,我们必须找到网页的编码类型,要不然就会乱码,那么我们怎么知道网页的编码类型呢,在<head>头文件里的<meta>里
如图:
现在我们获取到该地址的所有数据都存在page里面了,那么我们要怎么去过滤里面内容,找到我们需要的内容呢,这就要用到正则表达式了,我们简单学习下正则表达式:
找到我们需要过滤的内容:
<a href="thread-545836-1-1.html" οnclick="atarget(this)" class="s xst">个人快速启动源码</a>
开始写正则,为了观看方便,我用不同的颜色区分开:
<a href="(thread-.+?)".+?class="s xst">(.+?)</a>
zz = r'正则表达式' zz =r'<a href="(thread-.+?)".+? class="s xst">(.+?)</a>'
.+? 任意字符一个或则多个
(.+?) 提取括号中匹配的数据
意思是我需要提取的是 thread-545836-1-1.html 和 个人快速启动源码
继续写代码
#正则表达式
zz = r'<a href="(thread-.+?)".+? class="s xst">(.+?)</a>'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
print(html)
效果不是很理想,那我们来优化下,把标题和链接分开,链接进行个拼接
i = 0
for line in html:
line = html[i]
#链接
m1 = "https://www.52pojie.cn/"+line[0]
#标题
m2 = line[1]
#打印标题和链接
#print(m2+" "+m1)
i = i + 1
将html集合里面的内容每一个内容赋值给line
line里面第一个数据的效果:
('thread-682517-1-1.html', '2018年腾讯游戏安全技术竞赛最终获奖结果及分数细节')
将line里面第一个元素赋值给m2,第二个赋值给m1
m1 = https://www.52pojie.cn/ thread-682517-1-1.html
m2 = 2018年腾讯游戏安全技术竞赛最终获奖结果及分数细节
完整代码:
import urllib.request
import re
url="https://www.52pojie.cn/forum-24-1.html"#爬的地址
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
#正则表达式
zz = r'<a href="(thread-.+?)".+? class="s xst">(.+?)</a>'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
i = 0
for line in html:
line = html[i]
#链接
m1 = "https://www.52pojie.cn/"+line[0]
#标题
m2 = line[1]
#打印标题和链接
print(m2+" "+m1)
i = i + 1
代码写完了,是不是很简单,我们来看下效果
同理
那我们来试试爬移动区的帖子
只要更改下url地址就可以
https://www.52pojie.cn/forum-65-1.html
如图:
可能有的0基础的萌新还是看不懂,那就看看书吧,学习语法