python - 使用正则表达式从 HTML 中提取所有值

标签 python regex web-scraping beautifulsoup

我需要一个插入来完成这个脚本。

我正在为特定子字符串抓取新闻稿网站。目的是为名为提到的公司.. 的特定部分解析页面,并将每个公司的名称放入列表数据类型

这是我目前所拥有的,它有效但只得到第一项:

from bs4 import BeautifulSoup as bs4
import requests
import re

url = 'http://news.hipsternomics.com/issues/how-much-is-your-personal-data-worth-on-the-black-market-148489'
r = requests.get(url).text
soup = bs4(r, 'html.parser')
companies = []
for elem in soup(text=re.compile(r'^(.*?Companies mentioned\b)')):
    companies.append(elem)    

期望的结果:

  • 我想将提到的公司放入这样的列表中: [谷歌、苹果、特斯拉、耐克、TJX、Ross、L Brands、多米诺骨牌]

我还对可以改进正则表达式函数以捕获异常情况的方法持开放态度,例如“本期中提到的公司:”或“提到的公司:”,如 here 所示. 谢谢。

最佳答案

您可以通过提供 div 类值来访问内容:

import requests, re
from bs4 import BeautifulSoup as soup
d = soup(requests.get('http://news.hipsternomics.com/issues/how-much-is-your-personal-data-worth-on-the-black-market-148489').text, 'html.parser')
new_d = [i for i in d.find_all('div', {'class':'revue-p'}) if 'Companies mentioned' in i.text][0]
*final_results, _ = [re.sub('^[\w\s]+[,\s:]+|^[,\s]+|\s+$', '', i) for i in new_d.contents if isinstance(i, str)]

输出:

['Google', 'Apple', 'Tesla', 'Nike', 'TJX', 'Ross', 'L Brands', 'Domino’s']

关于python - 使用正则表达式从 HTML 中提取所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139932/

相关文章:

python - 在 Django 框架中匹配两个配置文件

python - 抓取具有多个链接的页面上的特定链接?

javascript - javascript中的replace()回调函数没有被调用

python - Scrapy - 在未返回项目字段之一时处理异常

web-crawler - 分类网站

python - 将 .txt url 保存在文件夹中

python - 为什么进程没有收到队列事件?

python - 正则表达式从给定类型的字符串中获取多个日期

regex - 是否可以在正则表达式中对变量值进行数学运算?

regex - Sublime Text 2 中的正则表达式搜索替换