Python爬虫如何正则表达式

  介绍

今天就跟大家聊聊有Python爬关虫如何正则表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>爬虫,爬虫中使用正则表达式

下面我们尝试爬取内涵段子网站:http://www.neihan8.com/article/list_5_1.html

打开之后,当你进行翻页的时候,不难注意到,url地址的变化:

第一页url: http://www.neihan8.com/article/list_5_1 . html

第二页url: http://www.neihan8.com/article/list_5_2 . html

第三页url: http://www.neihan8.com/article/list_5_3 . html

第四页url: http://www.neihan8.com/article/list_5_4 . html

这样,我们把url规律找到了,要想爬取所有的段子,只需要修改一个参数即可。下面,我们就开始一步一步将所有的段子爬取下来。

<强>第一步:获取网页数据(网页上全部内容)

1。按照我们之前的用法,我们需要写一个加载页面的方法。

这里我们定义一个类,将url请求作为一个成员方法处理。

我们创建一个duanzi_spider。py文件。

然后定义一个蜘蛛类,并且添加一个加载页面的成员方法。

# !/usr/bin/python3   #,- *安康;编码:utf-8  - *   ,   import 请求   ,   class 蜘蛛(对象):   ,,,,,,   ,,,一个爬虫类   ,,,,,,   ,,,def  loadPage(自我,url):   ,,,,,,,,,,   ,,,,,,,下载指定网址页面的内容   ,,,,,,,:返回:   ,,,,,,,,,,   ,,,,,,,#用户代理头   ,,,,,,,header =,{& # 39;用户代理# 39;:& # 39;Mozilla/5.0, (Windows  NT  6.1;, WOW64), AppleWebKit/537.36, (KHTML, like 壁虎),   ,,,,,,,Chrome/39.0.2171.71  Safari/537.36 & # 39;}   ,,,,,,,response =, requests.get (=url  url, headers =,头)   ,,,,,,,html =, response.content.decode (“gb18030")   ,,,,,,,,   ,,,,,,,#,打印页面内容   ,,,,,,,印刷(html)   ,,,,,,,,   ,,,,,,,#,返回页面内容   ,,,,,,,return  html

2。主要写函数测试loadPage()方法

if  __name__ ==, & # 39; __main__ # 39;:   ,,,#,实例化类对象   ,,,my_spider =,蜘蛛()   ,,,#,让用户输入需爬取页面的页码   ,,,page =, int(输入(“请输入你需要爬取的页码:“))   ,,,#,拼接用户需爬取页面的url地址   ,,,url =,“http://www.neihan8.com/article/list_5_ {} .html" .format(页面)   ,,,html =, my_spider.loadPage (url)

<强>第二步:筛选数据

我们已经得到了整个页面的数据。但是,里面有很多内容我们并不需要,所以下一步我们需要对上面爬取的内容进行筛选。如果筛选,这里就用到了我们前面讲到的正则表达式。

首先

import  re

然后:在我们得到的html中进行筛选匹配。

我们需要一个匹配规则:

,我们可以打开内涵段子的网页,鼠标点击右键”查看源代码”,你会发现,我们需要的每个段子的内容都是在一个& lt; div>标签中,而且每个div都有一个属性类=癴18 mb20"。

所以,我们只需要匹配到网页中所有& lt; div类=癴18 mb20"祝辞到& lt;/div>的数据就可以了。

根据正则表达式,我们可以推算出一个公式是:

& lt; div 类=癴18  mb20"祝辞(. * ?)& lt;/div>

这个表达式实际上就是匹配到所有div中类=癴18 mb20"里面的内容

然后将这个正则应用到代码中,我们会得到以下代码:

# !/usr/bin/python3   #,- *安康;编码:utf-8  - *   ,   import 请求   import 再保险   ,   class 蜘蛛(对象):   ,,,,,,   ,,,一个爬虫类   ,,,,,,   ,,,def  loadPage(自我,url):   ,,,,,,,,,,   ,,,,,,,下载指定网址页面的内容   ,,,,,,,:返回:   ,,,,,,,,,,   ,,,,,,,#用户代理头   ,,,,,,,header =,{& # 39;用户代理# 39;:& # 39;Mozilla/5.0, (Windows  NT  6.1;, WOW64), AppleWebKit/537.36, (KHTML, like 壁虎),   ,,,,,,,Chrome/39.0.2171.71  Safari/537.36 & # 39;}   ,,,,,,,response =, requests.get (=url  url, headers =,头)   ,,,,,,,html =response.content   ,   ,,,,,,,return  html.decode (“gb18030")   ,   ,,,def  screenPage(自我,html):   ,,,,,,,,,,   ,,,,,,,筛选html内容,返回列表   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Python爬虫如何正则表达式