re正则表达式

re模块正则表达式:

re模块是文件处理必不可少的模块,主要应用于字符串的查找、定位等。在使用网络爬虫时,即使没有爬虫框架,re模块配合urllib3模块也可以完成简单的爬虫功能

  1. 字符

    • .: 匹配任意除换行符“\n”以外的字符。例如.abc匹配abc
    • : 转义字符,使用最后一个字符改变原来的意思,例如a\.bc匹配a.bc
    • […]: 字符集(字符集)。对应字符集中的任意字符,第一个字符是^则相反,例如a[bc]d匹配abd和acd
  2. 预定义字符集

    • \d:数字[0-9]
    • \D:非数字[^\d]
    • \s: 空白字符[空格\t\r\n\f\v]
    • \S:非空白字符[^\s]
    • \w:单词字符[a-zA-Z0-9]
    • \W:非单词字符[^\w]
  3. 数量词

    • ​ *:匹配前一个字符0次或者无限次,例如al*b匹配ab、alb、a11b…。

    • +:匹配前一个字符1次或无限次,例如al*b匹配alb、a11b…。

    • ?: 匹配前一个字符0或1次,例如al?b匹配ab、a1b…。

    • {m}:匹配前一个字符m次,例如[a1{3}b]匹配a111b。

    • {m,n}:匹配前一个字符m-n次,例如a1{2,3}b匹配a11b,a111b。

  4. 边界匹配

    • ^:匹配字符串开头,例如 ^abc匹配以abc开头的字符串

    • : 匹配字符串结尾,例如 ‘ x y z :匹配字符串结尾,例如`xyz :匹配字符串结尾,例如xyz`匹配以xyz结尾的字符串

    • \A:仅匹配字符串开头,例如\Aabc

    • \Z:仅匹配字符串结尾,例如·xyz\Z

python的re模块,提拱了两种不同的原始操作:match和search。match是从字符串的起点开始匹配,而search(perl默认)是对字符串做任意匹配,常见的re模块方法如下:

  • re.compile(patten,flag=0):将字符串形式的正则表达式编译为python对象
  • re.search(string[,pos[,end]]):从string的任意位置开始匹配
  • re.match(string[,pos[,end]]):从string的开头开始匹配
  • re.findall(string[,pos[,end]])从string的任意位置开始匹配,返回一个列表
  • re.finditer(string[,pos[,end]])从string的任意位置开始匹配,返回一个迭代器

简单测试

import re

s = 'I am python modules test for re modules'
a = re.search('am', s).group();
print(a)
b = re.search('I am', s).group();
print(b)
c = re.findall('am', s);
print(c)
for i in re.finditer('modules', s):
    print(i.group())

输出结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nVyjeTV-1663853132220)(assets/image-20220922190426632.png)]

实战爬取黄桃书屋4000多页的小说名

链接地址:https://funv.me/sort/1/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ps77AF3k-1663853132221)(assets/image-20220922192908809.png)]

import  re
import requests #导入模块
url='https://funv.me/sort/1/'#链接地址网址
content=requests.get(url=url).text
print(content)

运行得到以下数据: 以第一本小说为例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwQ6nqj4-1663853132222)(assets/image-20220922192807785.png)]

获取书名,作者,最新章节

bookname=re.findall('<a href="/book/\d{4,10}/">(.*?)</a>',content)#\d{4,10}匹配4到10个数字,(.*?)就是我们要获取的数据
author=re.findall('作者:(.*?)</div>',content)
last_chapter=re.findall('html">(.*?)</a>',content)
print(bookname,author,last_chapter)

输出结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k8PKkrG0-1663853132222)(assets/image-20220922195007891.png)]

全部代码:

import  re
import requests #导入模块
headers={#请求头,删除应该也可以运行
   "user_agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
url='https://funv.me/sort/1/'#链接地址网址
content=requests.get(url=url).text
print(content)
bookname=re.findall('<a href="/book/\d{4,10}/">(.*?)</a>',content)#\d{4,10}匹配4到10个数字,(.*?)就是我们要获取的数据
author=re.findall('作者:(.*?)</div>',content)
last_chapter=re.findall('html">(.*?)</a>',content)
print(bookname,author,last_chapter)

爬取4000多页的全部小说

首先关注每一页的网址:

第一页:https://funv.me/sort/1/

第二页:https://funv.me/sort/2/

第三页:https://funv.me/sort/3/

已经很明显了,只是后面的数字发生变化,现在我们用循环语句来爬取,并写入excel

这里需要添加一个cookie和headers,按下F12,点击network

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrJaDf6x-1663853132223)(assets/image-20220922200424045.png)]

**代码如下:**这里只爬取了100页,毕竟我有点慌

import  re
import requests #导入requests模块,需要下载
import csv#导入csv模块
with open("黄桃小说.csv",mode="w",encoding="utf-8") as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['小说名','作者','最新章节'])
headers={
   'cookie':'这里更换自己的cookie,useagent可以不用更改',
   "user_agent": 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36'
}
for i in range(1,100):#把100改成4000就是爬取4000页的数据
   url=f'https://funv.me/sort/{i}/'#链接地址网址
   content=requests.get(url=url,headers=headers).text
   # print(content)
   bookname=re.findall('<a href="/book/\d{4,10}/">(.*?)</a>',content)#\d{4,10}匹配4到10个数字,(.*?)就是我们要获取的数据
   author=re.findall('作者:(.*?)</div>',content)
   last_chapter=re.findall('html">(.*?)</a>',content)
   for i in range(10):
      Bookname=bookname[i]
      Author=author[i]
      Last_chapter=last_chapter[i]

      with open("黄桃小说.csv", mode="a", encoding="utf-8") as f:
         csv_writer = csv.writer(f)
         csv_writer.writerow([Bookname,Author,Last_chapter])


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44gRspdg-1663853132223)(assets/image-20220922201407521.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值