【问题标题】:Is there a better way to structure this scrape?有没有更好的方法来构建这个刮?
【发布时间】:2020-03-08 02:58:41
【问题描述】:

仍在学习如何使用 BeautifulSoup 和 Python 进行网页抓取。我想出这个是为了从这个网站https://lawyers.justia.com/lawyer/ali-shahrestani-esq-198352获取专业经验。

for item in soup.findAll("dl",attrs={"class":"description-list list-with-badges"}):
    x=item.findAll("strong")
    x=remove_tags(str(x))
    print(x)

输出:

[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[Attorney]
[]
[]
[]
[]
[]
[]
[]
[]
[]

我也希望获得“律师”下的信息,但我很挣扎。

【问题讨论】:

  • if x: x[0].find(...)获取信息

标签: python beautifulsoup scrape


【解决方案1】:

您可以使用if x: 过滤数据,之后您可以使用item 做不同的事情

for item in soup.find_all("dl", {"class": "description-list list-with-badges"}):
    x = item.find_all("strong")
    if x:
        print('strong:', x[0].get_text(strip=True))
        print('text:', item.get_text(strip=True, separator='|'))
        print('list:', item.get_text(strip=True, separator='|').split('|'))

结果

strong: Attorney
text: Attorney|Ali Shahrestani, Esq.|2007|- Current
list: ['Attorney', 'Ali Shahrestani, Esq.', '2007', '- Current']

或者您可以尝试使用其他唯一值 - 即。

<strong itemprop='jobTitle'>

并使用其他功能 - 即parent

data = soup.find('strong', {'itemprop': 'jobTitle'}).parent.parent
print('text:', data.get_text(strip=True, separator='|'))
print('list:', data.get_text(strip=True, separator='|').split('|'))

结果:

text: Attorney|Ali Shahrestani, Esq.|2007|- Current
list: ['Attorney', 'Ali Shahrestani, Esq.', '2007', '- Current']

完整示例

import requests
from bs4 import BeautifulSoup as BS

url = 'https://lawyers.justia.com/lawyer/ali-shahrestani-esq-198352'
r = requests.get(url)

soup = BS(r.text, 'html.parser')

for item in soup.find_all("dl", {"class": "description-list list-with-badges"}):
    x = item.find_all("strong")
    if x:
        print('strong:', x[0].get_text(strip=True))
        print('text:', item.get_text(strip=True, separator='|'))
        print('list:', item.get_text(strip=True, separator='|').split('|'))

print('---')

item = soup.find('strong', {'itemprop': 'jobTitle'}).parent.parent
print('text:', item.get_text(strip=True, separator='|'))
print('list:', item.get_text(strip=True, separator='|').split('|'))

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多