Python中如何使用正则表达式进行数据抓取?

re.findall(’’’[u4E00-u9FFF|()()]{5,20}有限公司|[u4E00-u9FFF|()()]{5,20}有限责任公司’’’,response.text)
python 匹配的结果是 [‘保险经纪公司可以以有限责任公司或股份有限公司’]x
但是我想只匹配 以有限责任公司结尾或者有限公司结尾
Python中如何使用正则表达式进行数据抓取?

4 回复

$ 符号,一般用来匹配结尾~


import re
import requests

# 示例:抓取网页中的邮箱地址
def extract_emails_from_url(url):
    # 1. 获取网页内容
    response = requests.get(url)
    html_content = response.text
    
    # 2. 定义邮箱正则表达式
    # 解释:匹配标准邮箱格式 username@domain.tld
    email_pattern = r'\b[A-Za-z0-9._%+-]+@[-A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
    
    # 3. 使用findall查找所有匹配项
    emails = re.findall(email_pattern, html_content)
    
    return emails

# 使用示例
if __name__ == "__main__":
    url = "https://example.com/contact"  # 替换为目标网址
    found_emails = extract_emails_from_url(url)
    print(f"找到的邮箱地址: {found_emails}")

# 更复杂的例子:抓取特定结构的数据
def extract_product_info(html):
    """
    从HTML中提取产品信息
    假设产品信息格式:<div class="product">产品名 - ¥价格</div>
    """
    # 使用分组捕获产品名和价格
    pattern = r'<div class="product">([^<]+) - ¥(\d+\.?\d*)</div>'
    
    products = []
    for match in re.finditer(pattern, html):
        name = match.group(1).strip()
        price = float(match.group(2))
        products.append({"name": name, "price": price})
    
    return products

# 关键点说明:
# 1. re.findall() 返回所有匹配的字符串列表
# 2. re.finditer() 返回迭代器,适合处理大量数据
# 3. 使用原始字符串 r'pattern' 避免转义问题
# 4. 正则表达式需要根据实际网页结构调整

# 实用技巧:
# - 先用浏览器开发者工具查看网页源代码结构
# - 使用在线正则测试工具调试表达式
# - 考虑使用html.parser或BeautifulSoup处理复杂HTML

正则表达式抓取的核心就是re.findall()匹配文本模式。

总结建议:先分析网页结构再写正则。

你不给原文,别人很难帮到你。

你是想匹配公司名字?感觉正则表达式做不到。要实现的话,得弄个语义词库

回到顶部