我是一个使用Python进行Web抓取的绝对初学者,对Python编程知之甚少。我只是想提取田纳西州律师的信息。在网页中,有多个链接,其中有更多关于律师类别的链接,其中有律师的详细信息。
我已经将各个城市的链接提取到一个列表中,并且还提取了每个城市链接中可用的各种类型的律师。现在我试着获取每个城市每个类别下律师的个人资料链接,从中我将检索律师的详细信息。但正在返回空列表。能做什么。如果可能的话建议。
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
res = requests.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=requests.get(c)
s1=bs(r.content,'lxml')
categories = [item['href'] for item in s1.select('.three_browse_columns:nth-of-type(2) a')]
#print(categories)
for c1 in categories:
r1=requests.get(c1)
s2=bs(r1.content,'lxml')
lawyers = [item['href'] for item in s2.select('.directory_profile a')]
print(lawyers)
“我希望输出的是每个类别律师的个人资料的链接,但它返回的是空列表。”
“
[][][][][][][]
” 最佳答案
使用类选择器时,您已经处于a
标记的级别,这是您的第一个问题。
我在下面使用了一个不同的选择器并测试了url,这些url掩盖了它们是同一个律师的事实。我分离成结束的网址,所以我可以使用设置删除重复。
我使用会话来提高重新使用连接的效率。我将律师资料添加到一个列表中,并通过set comprehension将列表扁平化,以删除任何重复的内容。
import requests
from bs4 import BeautifulSoup as bs
final = []
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')]
final.append(lawyers)
final_list = {item for sublist in final for item in sublist}
关于python - 在python中使用bs4从多个链接中获取律师详细信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56506892/