python - 在 python 中使用 bs4 从网站的不同链接中获取律师详细信息
问题描述
我是使用 Python 进行 Web Scraping 的绝对初学者,对 Python 编程知之甚少。我只是想提取田纳西州律师的信息。在网页中,有多个链接,其中还有更多关于律师类别的链接,其中还有律师的详细信息。
我已经将各个城市的链接提取到一个列表中,并且还提取了每个城市链接中可用的各种律师类别。此外,我将每个律师的 url 提取到不同的类别中,并将它们存储在一个单独的集合中。现在我已经遍历了这些 url,以获取律师的详细信息,最后将它们写入 .xls 文件。但是,当我运行我的代码时,该过程正在无限期地执行。我必须强制停止该过程,甚至没有在程序中所述的所需位置创建 .xls 文件。可以做什么?如果可能的话建议。
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
final=[]
records=[]
with requests.Session() as s:
res = s.get('https://attorneys.superlawyers.com/tennessee/', headers = {'User-agent': 'Super Bot 9000'})
soup = bs(res.content, 'lxml')
cities = [item['href'] for item in soup.select('#browse_view a')]
for c in cities:
r=s.get(c)
s1=bs(r.content,'lxml')
categories = [item['href'] for item in s1.select('.three_browse_columns:nth-of-type(2) a')]
for c1 in categories:
r1=s.get(c1)
s2=bs(r1.content,'lxml')
lawyers = [item['href'].split('*')[1] if '*' in item['href'] else item['href'] for item in
s2.select('.indigo_text .directory_profile')]
for i in lawyers:
r2 = s.get(i)
s3 = bs(r2.content, 'lxml')
name = s3.select_one('#lawyer_name').text
category = s3.select_one('#attorney_profile_heading').text
firm = s3.select_one('#firm_profile_page').text
address = ' '.join([string for string in s3.select_one('#poap_postal_addr_block').stripped_strings][1:])
practices = ' '.join([item.text for item in s3.select('#pa_list li')])
records.append({'Names': name,'Category':category,'Address': address, 'Firm Name': firm,'Practice Area':practices})
df = pd.DataFrame(records,columns=['Names','Category','Address','Farm Name','Practice Areas'])
df=df.drop_duplicates()
df.to_excel(r'C:\Users\laptop\Desktop\lawyers.xls', sheet_name='MyData2', index = False, header=True)
“我希望程序完成其执行并创建一个 .xls 文件,但它正在执行,甚至我也不知道它需要多长时间才能完成它的执行。是否有可能发生无限循环?如果可能的话建议。”
解决方案
我看到你试图抓取的数据太多,使用 BeautifulSoup 会花费很多时间,我尝试抓取这个网站,即使将搜索分成四个不同的程序文件,成功完成执行也需要大约 12 小时,我还尝试了仅布伦特伍德市的代码,大约花了一个小时。我在您的代码中没有看到无限循环!让它运行并有耐心。
此外,您的程序还没有创建任何 .xml,因为它还没有到达那部分代码。
PS:我知道这应该是一个评论,但我目前没有足够的声誉来这样做。希望这个答案可以帮助您和我获得声誉,以便下次能够发表评论。
推荐阅读
- flutter - Dart,Flutter:异常:键入“列表”
' 不是类型 'Map 的子类型 ' 在类型转换中 - xaml - Xamarin 表单按钮计数单击导航
- scrapy - 如何在 Scrapy 中将参数字典作为蜘蛛参数传递?
- android-studio - Android Studio 错误 | 模拟器:模拟器:错误:VkCommonOperations.cpp:496:无法创建 Vulkan 实例
- java - Java 8 Stream:在元素之后查找第一个元素
- c++ - 为什么 C++ 中的 `const char *` 类型可以存储 Unicode?
- powershell - 用于删除脚本中的块注释的 Powershell 脚本
- mysql - 在 sql 数据库中创建一个包含 1000 多列且名称递增的新表
- amazon-cloudformation - 用于执行 CloudFormation 更改集的直接 URL
- google-cloud-platform - 如何在谷歌 colab tpu 上使用 torchaudio 和 torch xla