python - 有没有更好的方法来构建这个刮?
问题描述
仍在学习如何使用 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:
,稍后您可以使用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('|'))
推荐阅读
- c# - 拦截键盘输入并返回自定义值
- html - Outlook 的电子邮件问题
- python - 可以通过命令行连接到数据库,但不能在 Python 脚本中连接?
- java - JFrame 最初出现的最大宽度限制为我的显示器宽度
- java - 将 InputStream 作为输入的对象方法转换为要打印的数组
- excel - 使用布尔值创建类的问题
- ag-grid - AG-Grid 获取无限滚动的页码
- javascript - 反应发布图像文件上传问题 - 仅限生产
- c++ - 从 time_t 转换为 tm 然后再转换回 time_t 时出现问题
- php - PhpStorm 和 WordPress 插件开发 - 无法正常工作