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()匹配文本模式。
总结建议:先分析网页结构再写正则。
你不给原文,别人很难帮到你。
你是想匹配公司名字?感觉正则表达式做不到。要实现的话,得弄个语义词库

