使用python中的bs4从网站的不同链接获取律师详细信息

使用python中的bs4从网站的不同链接获取律师详细信息,python,pandas,web-scraping,beautifulsoup,Python,Pandas,Web Scraping,Beautifulsoup,我是使用Python进行Web抓取的绝对初学者,对Python编程知之甚少。我只是想提取田纳西州律师的信息。在该网页中,有多个链接,其中有更多关于律师类别的链接,其中有律师详细信息 我已经将各个城市的链接提取到一个列表中,还提取了每个城市链接中可用的各类律师。此外,我已经提取了不同类别中的每个url,并将它们存储在一个单独的集合中。现在我已经遍历了这些URL,获取律师的详细信息,并最终将其写入.xls文件。但是,当我运行代码时,这个过程将持续执行一段时间,而且执行时间是不确定的。我必须强制停止进

我是使用Python进行Web抓取的绝对初学者,对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:我知道这应该是一个评论,但我目前没有足够的声誉这么做。希望这个答案能帮助您和我赢得声誉,以便下次能够发表评论。

我做错了什么?如果可能的话,请提出建议。我会首先在每个“for”循环的开头添加一个“print”语句,这样您就可以了解正在发生的事情。我已经检查了它们,将print语句放在每个“for”循环的前面,从而看到列表,即城市、类别和律师按预期返回url链接。但程序仍在持续运行。好的,谢谢回复。正如您所说,即使在长时间执行约12小时后,是否会创建任何.xls文件?实际上,您已经声明了“.xml”,这就是为什么我要问这个问题。如果可能的话,建议可以做什么?哦,对不起,这是一个打字错误,我的意思是.xls文件。顺便问一下,你有没有得到任何结果?