最近Python爬虫比较火,看到网上分享源码的比较多,很少有教程帖子,为了帮助新人和对爬虫比较感兴趣的朋友,所以想到写一些比较详细教程帖子!大家共同学习!
下载工具,安装对应系统的版本,下面以windows说明:
1、下载Python3.7
QQ图片0515112630.png(84.74 KB, 下载次数: 0)
保存到相册
-5-15 11:35 上传
3、配置环境变量
安装好Python后,复制安装路径,如安装路径C:\Python37,
按“Win+R”输入“cmd”后按“确定”按钮,在命令运行窗口
中输入“path=%path%;C:\Python37”。
测试环境变量,按Win+R输入cmd,在输入python,如图,就证明已经设置好了环境变量
好了准备工作,我们打开pyCharm编译器
1、点击Create New Project.
2、输入项目名、路径、选择python解释器
3、点击create之后,就会创建一个空项目,里面包含一个venv的文件夹,用于pycharm管理项目。
4、好了,写一个新的项目尝试一下pycharm吧!新建一个py文件:
那我们就以爬编程区的帖子为例吧:
1.首先找到地址/forum-1345-1.html
2.我用的谷歌浏览器,按F12,右边Elements的
标签里找我们需要的帖子链接和名字,如图:
那开始写代码:
import urllib.request
import re
先导入两个模块解释下这两个模块,新人朋友们了解下,其他有基础的朋友有兴趣可以深入研究下:
urllib.request
官方地址
urllib.request — 为打开url提供的可扩展类库源代码:Lib / urllib / request.pyurllib.request模块定义了方法和类,帮助打开url(主要是HTTP)在一个复杂的世界——基本和摘要式身份验证,重定向,cookies等等
re模块
re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
详细请看:
继续写代码:
import urllib.request
import re
url="/forum-1345-1.html"#爬的地址
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('utf-8') #转码
print(page)
我们来打印下page里面的内容:
是不是和图2网页里面的内容一模一样的
这里转码我讲下,'utf-8'是该网页的编码类型,我们必须找到网页的编码类型,要不然就会打印不正确,那么我们怎么知道网页的编码类型呢,在
头文件里的里
如图:
现在我们获取到该地址的所有数据都存在page里面了,那么我们要怎么去过滤里面内容,找到我们需要的内容呢,这就要用到正则表达式了,我们简单学习下正则表达式:
假设一下过滤内容,找head下的script:
开始写正则:
rf = r''
.+? 任意字符一个或则多个
(.+?) 提取括号中匹配的数据
上述代码的意思是我需要提取 script的src和type.
继续写代码:
#正则表达式
df= r'
(.+?)'
rf = r''
#匹配所有符合规则的内容存到html集合里面
html=re.findall(df, page, re.S)#re.S表示.可以代表\n
#匹配所有符合规则的内容存到html_script集合里面
for line in html:
html_script = re.findall(rf, line, re.S) # re.S表示.可以代表\n
print(html_script)
我们打印下看下效果:
效果不是很理想,那我们来优化下,把src和type分开,链接进行个拼接
将html_script集合里面的内容每一个内容赋值给ele
完整代码:
import urllib.request
import re
#url="/"#爬的地址
url="/forum-1345-1.html"
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('utf-8') #转码
#正则表达式
df= r'
(.+?)'
rf = r''
#匹配所有符合规则的内容存到html集合里面
html=re.findall(df, page, re.S)#re.S表示.可以代表\n
#匹配所有符合规则的内容存到html_script集合里面
for line in html:
html_script = re.findall(rf, line, re.S) # re.S表示.可以代表\n
for ele in html_script:
#type
title = ele[1]
#src
link = ele[0]
print('%s %s'%(title, link))
代码写完了,是不是很简单,我们来看下效果: