私を助けてくれてありがとう、私はウェブサイトの各ページにいるすべての人の公開連絡先情報をスクレイピングしようとしているので、URLを変更する機能とURLからソースコードを抽出する機能の3つを構築しますBeautifulSoup と 1 つを使用して変換し、最終的に名前、タイトル、電子メール、個人の Web サイト、および略歴を取得しますが、何らかの理由でわかりません。各ページの最初の要素のみを取得しています。合計をカバーしています。ページの量ですが、最初の人だけをこすり落とします。
その部分でコードを書いた方法は次のとおりです。ヒントを教えてくれたり、私がやっている間違いを見つけたりできれば、感謝します:)
def paginas(pages):
pag = (f'https://www.hsph.harvard.edu/profiles/page/{pages}/')
return pag
def extract(pag):
url = requests.get(pag).text
soup = BeautifulSoup(url, 'lxml')
return soup
def transform(soup):
#principal = soup.find('div', class_ = 'hsph-bootstrap')
items = soup.find_all('div', class_ = 'grid-card grid-card-hover position-relative border rounded px-4 py-5')
for item in items:
try:
#name = item.find('a').text.strip() this is another way of getting it in this website
name = item.find('h2', class_ = 'h3 mb-0').text.strip() #siempre tendrá
except:
name = 'not given'
#Contact data.
website = item.find('h2', class_ = 'h3 mb-0').a['href']
main = item.find('div', class_ = 'grid-card-content')
bio = main.find('div', class_ = 'faculty-bio small').text.strip()
university = 'Harvard School of Public Health'
#INSIDE THE LINK
wd = webdriver.Chrome(options=options)
wd.get(website)
insideurl = requests.get(website).text
insidesoup = BeautifulSoup(insideurl, 'lxml')
#BIO DATA
insitem = insidesoup.find('div', class_ ='row rounded bg-white p-5')
try:
email = insitem.find('p', class_ = 'faculty-contact mb-2').text.strip()
except:
email = ''
try:
ti = insitem.find('div', class_ = 'faculty-bio')
title = ti.find('p').text
except:
ti = ''
title = ''
#EXTRA DATA ON BIO.
try:
bio2 = insidesoup.find('div', class_ = 'faculty-profile-container container mb-5')
complete = bio2.find('div', class_ = 'faculty-profile-overview-section').text.strip()
except:
bio2 = ''
complete = ''
contact = {
'name' : name,
'title' : title,
'university' : university,
'email' : email,
'website' : website,
'bio' : complete,
'area' : bio,
}
leadlist.append(lead)
return
leadlist =[]
for pages in range(1,127,1):
c = paginas(pages)
b = extract(c)
d = transform(b)
print(len(leadlist))
```