python - Beautiful Soup - 抓取表格特定元素的更好方法

标签 python web-scraping beautifulsoup

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

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

这是我开始抓取的代码:

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

在我看来,我的 all_text 变量可能没有必要。看来一定有一种比我目前意识到的更巧妙的方法来做到这一点。例如:

all_text[7200:8000]

以上产量:

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"}, ...

我可以看到,在 $scope.retailers = 之后,我以一种易于解析的方式存储了我想要存储的所有信息。

我只是对 Beautiful Soup 不太熟悉,不知道使用 soup 或 all_text 变量循环遍历该表的最佳命令,并提取 Web 表每一行中的数据。

寻找此问题的具体解决方案以及针对初学者的任何一般 BeautifulSoup 建议。

最佳答案

由于这实际上不是您要解析的 HTML,而是 JavaScript 代码,因此我要么使用 JavaScript 解析器,例如 slimit ,或使用正则表达式:

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 元素的文本。

关于python - Beautiful Soup - 抓取表格特定元素的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641864/

相关文章:

python - 带有动态验证码的 Scrapy

python - 使用 Python 在 BeautifulSoup 4 中进行抓取 - 初学者

python - BeautifulSoup findAll 在选择类时返回空列表

python - 计算 N 叉树的奇数个数

python - 轮询 linux cp 命令以获取进度

python - 使用在 32x32 字母图像上训练的模型来预测整个文档 ocr 文本

Python 同时调用 Java 和 C 模块,如何?

javascript - 使用 applescript/javascript 将文件内容添加到 Web 表单

python - 希望每天抓取网站并设置警报

python - 如何混合pandas和beautifulsoup从xml文件目录中提取一些元素标签?