其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

关于python爬虫利用正则表达式爬取不到内容的问题

GG网络技术分享 2025-03-18 16:14 5


问题描述:

我在用正则表达式爬取豆瓣电影里面的电影演员信息。
网页演员信息的位置如下:

图片说明

那么要爬取其中的这些演员名不就是下面的代码吗?

actors = re.findall(r\'<div class=\"meta abstract_2\">(.*?)</div>\', resp, re.DOTALL)

其中resp是前面获取到的网页代码

可是print(actors)输出结果为空,请问是哪里不对呀?
有没有大佬就用正则表达式帮忙解答一下?因为我用爬虫只会用正则表达式匹配。

网友观点:

爬虫内容解析比较方便的不是正则而是 xpath ,语法也很容易,建议试试这种:

from lxml import etree  # 解析页面的模块

html = etree.HTML(top_page)# top_page 你的代码中的页面 text

result = html.xpath(\'//div[@class=\\\"meta abstract_2\\\"]text()\') # 得到 div 的文本内容。

你确定resp是网页文本内容?

不是语法的问题,是你获得的请求里压根没有你想要的数据,那些演员等等数据不是你第一次get的页面里的,是后续用js传的

【Python爬虫】正则表达式详解

正则表达式

为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。 而通过使用正则表达式,可以:

  • 测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  • 替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  • 基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。

语法

正则表达式语法由字符和操作符构成, 字母和数字表示他们自身。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。 常用的操作符模式如下:

正则表达式re库的使用

常用函数说明

  • 调用方式:import re
  • re库采用raw string类型表示正则表达式,表示为:r'text',raw string是不包含对转义符再次转义的字符串;

re库的主要功能函数

  • re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
    • re.search(pattern, string, flags=0)
    • 使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
  • re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
    • re.match(pattern, string, flags=0)
    • 使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
  • re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
    • re.findall(pattern, string, flags=0)
  • re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
    • re.split(pattern, string, maxsplit=0, flags=0)
    • maxsplit是分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
  • re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
    • re.finditer(pattern, string, flags=0)
  • re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
    • re.sub(pattern, repl, string, count=0, flags=0)
    • repl : 替换的字符串,也可为一个函数。
    • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • 参数说明
    • pattern是匹配的正则表达式
    • string是要匹配的字符串
    • flags : 正则表达式使用时的控制标记:
      • re.I --> re.IGNORECASE : 忽略正则表达式的大小写,[A‐Z]能够匹配小写字符
      • re.M --> re.MULTILINE : 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
      • re.S --> re.DOTALL : 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

re库的另一种等价用法(编译)

  • regex = re.compile(pattern, flags=0):将正则表达式的字符串形式编译成正则表达式对象, 供 match() 和 search() 等函数使用。

re 库的贪婪匹配和最小匹配

  • .* Re库默认采用贪婪匹配,即输出匹配最长的子串
  • *? 只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配

实用小例子

1.删除文本中的特殊符号

标签:

提交需求或反馈

Demand feedback