靓汤更好的方式来刮取标签上的特定元素

2024-09-29 07:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我从这个URL的表中抓取一些公开可用的零售数据:https://502data.com/retailers

我的目标是用python为每一列创建一个列表,例如一个包含web表该列中所有条目的“Name_list”和“country_list”等等。在

下面是我开始使用scrape的代码:

r = requests.get(url_to_scrape)
soup = BeautifulSoup(r.text, 'html.parser')
all_text = soup.get_text()

在我看来,我的all\U text变量可能没有必要。看来一定有比我现在意识到的更巧妙的方法来做到这一点。例如:

^{pr2}$

上述结果:

u', function($scope, $filter) {\n                    $scope.retailers = [{"licensenumber":"414876","name":"MAIN STREET MARIJUANA","city":"VANCOUVER","county":"CLARK","year":2017,"month":5,"sales":41170232.357500,"tax":14971101.020000,"recentSales":1374866.000000,"recentTax":508700.000000,"monthName":"May"}, ...

我可以在以后看到$范围零售商=我把我想要的所有信息都以一种易于解析的方式存储。在

我只是不太熟悉Beautiful Soup,不知道在这个表中循环使用Soup或all-tu text变量,并从web表的每一行中提取数据的最佳命令。在

为初学者寻找这个问题的具体解决方案以及任何一般的美化小组建议。在


Tags: 数据texthttpscomweburl目标get
1条回答
网友
1楼 · 发布于 2024-09-29 07:33:01

因为这实际上不是您想要解析的HTML,而是JavaScript代码,所以我要么使用JavaScript解析器,比如^{},要么使用一个正则表达式

import json
import re

import requests


url = "https://502data.com/retailers"
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'})

pattern = re.compile(r"\$scope\.retailers = (\[.*?\]);")

match = pattern.search(response.text)
data = json.loads(match.group(1))
for item in data:
    print(item["name"])

这里的括号表示"capturing group",反斜杠用于转义字符。在

请注意,我直接对页面源应用表达式,而根本没有使用BeautifulSoup。不过,我们可以使用它来定位这个script元素,然后将表达式应用于script元素的文本。在

相关问题 更多 >