本帖最后由 wushaominkk 于 2018-7-31 16:20 编辑
最近Python爬虫比较火,看到本版区都是分享源码的比较多,很少有教程帖子,为了帮助新人和对爬虫比较感兴趣的朋友,所以想到写一些比较详细教程帖子!大家共同学习!
准备工作:
QQ图片20180515112630.png (84.74 KB, 下载次数: 1)
2018-5-15 11:35 上传
3、配置环境变量
安装好Python后找到快捷键,右键点属性,找到目标路径复制
我的电脑,右键-属性-高级-环境变量-系统变量-修改Path,在变量值的最后面加一个;然后把目标路径复制进去
设置好环境变量后测试一下,Win+R,输入cmd,在输入python,如图,就证明已经设置好了环境变量
QQ图片20180515114745.png (43.33 KB, 下载次数: 2)
2018-5-15 11:47 上传
输一个简单的指令 print("hello"),就可以在控制台打印出hello这句话.
好了准备工作,我们打开pyCharm编译器
首次使用
1、点击Create New Project.
20130718114827500.jpg (40.91 KB, 下载次数: 1)
2018-5-15 13:52 上传
2、输入项目名、路径、选择python解释器。如果没有出现python解释器
20130718115038171.jpg (58.58 KB, 下载次数: 2)
2018-5-15 13:52 上传
3、选择python解释器。可以看到,一旦添加了python解释器,pycharm就会扫描出你已经安装的python扩展包,和这些扩展包的最新版本。(估计是pycharm连接了pypi)
4、点击OK之后,就会创建一个空项目,里面包含一个.idea的文件夹,用于pycharm管理项目。
5、好了,写一个新的项目尝试一下pycharm吧!新建一个py文件,
如图1:
QQ图片20180515135927.png (30.78 KB, 下载次数: 2)
2018-5-15 13:59 上传
那我们就以爬编程区的帖子为例吧:
2.我用的谷歌浏览器,按F12,右边Elements的
标签里找我们需要的帖子链接和名字,
如图2:
QQ图片20180713113251.png (185.05 KB, 下载次数: 0)
2018-7-13 16:40 上传
先整理下思路
为了获取的内容更精确,我们先获取tbody里面的内容
然后获取链接和标题
QQ图片20180713164740.png (245.78 KB, 下载次数: 1)
2018-7-13 16:47 上传
[size=13.3333px]
[Python] 纯文本查看 复制代码【Python】萌新跟我来入门Python爬虫
[size=13.3333px]里面链接和标题
[size=13.3333px]
那开始写代码:
[Python] 纯文本查看 复制代码import urllib.request
import re
先导入两个模块解释下这两个模块,新人朋友们了解下,其他有基础的朋友有兴趣可以深入研究下
urllib.request
原地址:
urllib.request — 为打开url提供的可扩展类库源代码:Lib / urllib / request.pyurllib.request模块定义了方法和类,帮助打开url(主要是HTTP)在一个复杂的世界——基本和摘要式身份验证,重定向,cookies等等。
re模块
re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
继续写代码
[Python] 纯文本查看 复制代码url="https://www.52pojie.cn/forum-24-1.html"#爬的地址
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
print(page)
我们来打印下page里面的内容
QQ图片20180515155748.png (169.01 KB, 下载次数: 2)
2018-5-15 15:57 上传
是不是和图2网页里面的内容一模一样的
这里转码我讲下,'gbk'是该网页的编码类型,我们必须找到网页的编码类型,要不然就会乱码,那么我们怎么知道网页的编码类型呢,在
头文件里的里
如图:
QQ图片20180515142531.png (81.21 KB, 下载次数: 0)
2018-5-15 14:25 上传
现在我们获取到该地址的所有数据都存在page里面了,那么我们要怎么去过滤里面内容,找到我们需要的内容呢,这就要用到正则表达式了,我们简单学习下正则表达式:
QQ图片20180515160203.png (47.71 KB, 下载次数: 7)
2018-5-15 16:02 上传
找到我们需要过滤的内容:
开始写正则,为了观看方便,我用不同的颜色区分开:
(.+?)
zz = r'正则表达式' zz =r'(.+?)'
.+? 任意字符一个或则多个
(.+?) 提取括号中匹配的数据
意思是我需要提取的是thread-545836-1-1.html 和个人快速启动源码
继续写代码
[Python] 纯文本查看 复制代码#正则表达式
zz = r'(.+?)'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
print(html)
我们打印下看下效果
QQ图片20180515162018.png (16.67 KB, 下载次数: 2)
2018-5-15 16:20 上传
效果不是很理想,那我们来优化下,把标题和链接分开,链接进行个拼接
[Python] 纯文本查看 复制代码for line in html:
html_link = re.findall(zz_mData, line, re.S) # re.S表示.可以代表\n
#标题
title = html_link[0][1]
#链接
link = html_link[0][0]
print('%d、%s https://www.52pojie.cn/%s'%(title_naumber,title,link))
title_naumber = title_naumber+1
将html集合里面的内容每一个内容赋值给line
完整代码:
[Python] 纯文本查看 复制代码import urllib.request
import re
url="https://www.52pojie.cn/forum-24-1.html"#爬的地址
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
#print(page)
#正则表达式
zz1= r'
'
#匹配链接和标题
zz_link = r'(.+?)'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz1,page,re.S)#re.S表示.可以代表\n
#print(html)
for line in html:
html_link = re.findall(zz_link, line, re.S) # re.S表示.可以代表\n
#标题
title = html_link[0][1]
#链接
link = html_link[0][0]
print('%d、%s https://www.52pojie.cn/%s'%(title_naumber,title,link))
爬编程区所有帖子:
[Python] 纯文本查看 复制代码import urllib.request
import re
page_number= 1#页数
title_naumber = 1#每个帖子的编号
mData={}
url = "https://www.52pojie.cn/forum-24-1.html" # 爬第一页的地址
page = urllib.request.urlopen(url).read() # 获取到该地址的所有内容
page = page.decode('gbk') # 转码
zz_pageNumber=r'(.+?)'
#匹配出总页数
str_pagenumber = re.findall(zz_pageNumber, page, re.S)#str_pagenumber = [' / 177 页', ' / 177 页']
#将非数字用空字符串替换然后转化成int类型
page_Maxnumber = int(re.sub('\D','',str_pagenumber[0]))#\D表示非数字
#print(page_Maxnumber)
for index in range(page_Maxnumber):
url = "https://www.52pojie.cn/forum-24-%d.html" % page_number # 爬的地址
if page_number > 2:
page = urllib.request.urlopen(url).read() # 获取到该地址的所有内容
page = page.decode('gbk','ignore') # 转码
# 正则表达式
#匹配整个页面
zz = r'
'
#匹配链接和标题
zz_mData = r'(.+?)'
# 匹配所有符合规则的内容存到html集合里面
html = re.findall(zz, page, re.S) # re.S表示.可以代表\n
# print(html)
for line in html:
html_link = re.findall(zz_mData, line, re.S) #举例 ('thread-739688-1-1.html', '【Python】萌新跟我来入门Python爬虫')]
#标题
title = html_link[0][1]# '【Python】萌新跟我来入门Python爬虫'
#链接
link = html_link[0][0]# link = 'thread-739688-1-1.html'
print('%d、%s https://www.52pojie.cn/%s'%(title_naumber,title,link))
title_naumber = title_naumber+1
print("第%d页\n"% page_number)
page_number = page_number + 1
代码写完了,是不是很简单,我们来看下效果
同理
那我们来试试爬移动区的帖子
只要更改下url地址就可以