我是一个使用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/

10-09 19:41