宝哥软件园

Python爬虫的正则表达式学习笔记

编辑:宝哥软件园 来源:互联网 时间:2021-09-07

正则表达式的使用

如果你想学习Python爬虫,首先需要知道如何使用正则表达式。让我们看看如何使用它们。

此时的点相当于一个占位符,可以匹配任何字符。你什么意思?只看一个例子

导入re内容=' hello world' b=re。find all ('w . ',content) print b `注意,我们先导入re,然后猜测此时的输出是什么。因为。相当于一个占位符,此时的输出是wo。

*的用法与上面不同。*可以与前一个字符匹配任意次。举个例子

内容='你好世界你好世界' b=re。find all ('w * ',content) print b此时的输出结果是['','','','','',',' w ',' ',',',',',',',',','],可以看出是列表,长度与匹配字符串一致,需要匹配的字符打印出来。

的使用。*.*是一种组合使用,可以匹配尽可能多的内容,例如下面的例子

content=' helloworldhloworldworld ' b=re。芬达尔('他。* LD ',内容)打印b它将输出['helloworldworld']。为什么它不打印多个helloworldworld,为什么全部打印?这是一个贪婪算法,意思是我想找到最长的符合要求的内容。*?与上面相反,这个符号将找到最短的合格内容,并将其放入列表中,如下所示

content=' xxhelolworldxxxxhelolworldxx ' b=re . findall(' xx。*?Xx ',内容)打印b的输出结果是[' xxhelworldxx ',' xxhelworldxx '],说明前面有一个xx,怎么去掉?很简单。加个括号就行了。支架在哪里?

content=' xxhelolworldxxxxhelolworldxx ' b=re . findall(' xx(。*?)xx ',内容)print b我们上面讨论的是内容不包含新的行字符。如果有一个新的行字符会发生什么?

content=' ' ' xxhello world xx ' ' ' b=re . findall(' xx(。*?)xx ',内容)此时打印b的输出结果是一个空列表,那怎么办?如果我们编写一个网络爬虫,网页的源代码必须不止一行。如果我们不能在另一行阅读它,那将是尴尬的。当然有解决办法~

content=' ' ' xxhello world xx ' ' ' b=re . findall(' xx(。*?)xx ',内容,re。s)打印b这是可以的,并且有一种非常方便的提取数字的技术,如下所示

Content=''' xx123456xx''' b=re。findall ('(d '),content,re。s)打印b抓取网页源代码中的图片链接并下载

本文只是网络爬虫的第一步,所以解释的比较浅,所以现在我们用正则表达式来实现一个手动的网络爬虫。什么是手动?也就是我们自己复制网页的源代码,保存在一个txt文件中,然后用正则表达式过滤信息,然后下载。

首先,我搜索了一下Linux桌面,然后找到了下面的网页

右键查看网络源码,按ctrl f搜索img src找到中间部分复制粘贴到txt文件。

那么我们就可以利用我们上面的知识来提取我们想要的信息。源代码如下

import re import请求f=open('source.txt ',' r ')html=f . read()f . close()pattern=' img src=' http :()。*?)' ' pic_url=re.findall(模式,html,re。S) i=0在pic_url:打印'下载: '中每个pic=请求. get(每个)fp=打开(' picture\' str(i))。jpg ',WB ')FP . write(pic . content)FP . close()I=I 1首先,打开我们保存网络源代码的txt文件,读取它,关闭文件流,然后通过正则表达式提取图片链接,最后通过requests中的get()方法下载图片。请注意,这个请求没有包含在Python中。我们需要下载指定的文件,然后放在Python的Lib目录下。在这里下载。进入网站后,按ctrl f搜索关键词请求,可以看到如下页面

如您所见,我们下载了文件。whl后缀,手动改为。zip后缀,然后将其解压缩以获得两个目录,可以通过将名为requests的目录复制并粘贴到上述目录中来使用这两个目录。

好了,就这些。让我们看看运行结果

C:Python27python.exe e :/PitOnCode/20160820/Spider . py download :3358 n1 . ITC.cn/img 8/WB/smccloud/fetch/2015/07/04/112732422680200576.jpg下载:3358 n1 . ITC.cn/img 8/WB/smccloud/fetch/2015/07/04/112640007056390918。JPG下载:http://n1.itc.cn/img8/WB/smccloud/fetch/2015/07/04/112547718465744154。JPG下载:http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/112455366330382227.jpg下载:3358 n1 . ITC.cn/img 8/WB/smccloud/fetch/2015/07/04/112363014254719641。JPG下载:http://n1.itc.cn/img8/WB/smccloud/fetch/2015/07/04/11227066219788742。JPG下载:http://n1.itc.cn/img8/wb/smccloud/fetch/2015/07/04/下载:3358 n1 . ITC.cn/img 8/WB/smccloud/fetch/2015/07/04/112085957910403853 . jpg进程已完成,退出代码0此时已成功下载。前往我们的图片目录查看下载的图片。

下载成功。注意,自己尝试查找网页源代码时,最好不要让中文出现在链接中,否则可能会出现乱码字符。由于我学习Python的时间比较短,对于中文乱码的处理不是那么得心应手,这里就不解释了。这篇文章将暂时结束。如果你有任何意见或问题,可以留言或私下和我聊天。

更多资讯
游戏推荐
更多+