Skip to main content
 首页 » 编程设计

python之Web 抓取 python 不返回任何内容

2024年09月03日44小虾米

我正在尝试从“https://data.lacity.org/A-Safe-City/Crime-Data-from-2010-to-Present/y8tr-7khq”进行网络抓取。具体来说,在div class = "socrata-table frozen-columns"下,所有的data-column name & data-column description。但是,我编写的代码似乎无法正常工作(它没有返回任何内容?)

import requests 
from bs4 import BeautifulSoup 
url = "https://data.lacity.org/A-Safe-City/Crime-Data-from-2010-to-Present/y8tr-7khq" 
page = requests.get(url) 
print(page.status_code) 
soup=BeautifulSoup(page.content,'html.parser') 
 
 
for col in soup.find_all("div", attrs={"class":"socrata-visualization-container loaded"})[0:1]: 
   for tr in col.find_all("div",attrs={"class":"socrata-table frozen-columns"}): 
      for data in tr.find_all("div",attrs={"class":"column-header-content"}): 
        print(data.text) 

我的代码错了吗?

请您参考如下方法:

页面是动态加载的,数据集是分页的,这意味着使用浏览器自动化来检索,这很慢。您可以使用一个 API。它具有允许您批量返回结果的参数。

阅读 API 文档 here .这将是一种更有效、更可靠的数据检索方式。

使用limit 来确定一次检索的 # 条记录;使用 offset 参数开始下一批新记录。此处调用示例。

因为它是一个查询,您实际上可以像 SQL 查询一样定制其他参数以检索所需的结果集。这也意味着您可以编写一个非常快速的初始查询来返回数据库中的记录数,您可以使用它来确定批处理请求的终点。

您可以编写一个使用多处理的基于类的脚本,并更有效地抓取这些批处理。

import requests 
import pandas as pd 
from pandas.io.json import json_normalize 
 
response  = requests.get('https://data.lacity.org/api/id/y8tr-7khq.json?$select=`dr_no`,`date_rptd`,`date_occ`,`time_occ`,`area_id`,`area_name`,`rpt_dist_no`,`crm_cd`,`crm_cd_desc`,`mocodes`,`vict_age`,`vict_sex`,`vict_descent`,`premis_cd`,`premis_desc`,`weapon_used_cd`,`weapon_desc`,`status`,`status_desc`,`crm_cd_1`,`crm_cd_2`,`crm_cd_3`,`crm_cd_4`,`location`,`cross_street`,`location_1`&$order=`date_occ`+DESC&$limit=100&$offset=0') 
data = response.json() 
data = json_normalize(data) 
df = pd.DataFrame(data) 
print(df) 

JSON 响应中的示例记录: