2017-11-30 11 views
0

본인은이 부분에 대한 빠른 문제가 있습니다. 기본적으로 나는 beautifulsoup를 사용하여 웹 사이트를 스크랩하고 있습니다.beautifulsoup (TypeError : 'int'객체는 subscriptable이 아님)를 사용하여 전자 메일 주소를 추출하십시오.

<div class="startup-email-link social-links-startup"> 
    <a href="mailto:[email protected]">d</a> 
</div> 

을 그리고 내 코드는 나에게이 오류 제공 : I 클래스와 사업부 내에 A HREF 태그 만 전자 메일 주소를 추출해야합니다 (아래 참조) 형식 오류를 'INT'객체는

를 첨자에 있지 않습니다
import requests 
from bs4 import BeautifulSoup 
import re 

source_code = requests.get(item_url) 
plain_text = source_code.text 
soup = BeautifulSoup(plain_text, "html.parser") 

for link in soup.find('div', {'class': 'startup-email-link'}): 
    href = link.find('a')['href'] 
    print(href) 


    #href_final = re.compile('mailto') 
    #print(href_final) 

답변

1

soup.find은 이미 하나의 태그를 반환하므로 반복 할 필요가 없습니다.

div = soup.find('div', {'class': 'startup-email-link'}) 
if div is None: 
    return None 
anchor = div.find('a') 
if anchor is None: 
    return None 
return anchor['href'] 

아니면 CSS 선택기를 사용할 수 있습니다

soup.find('div', {'class': 'startup-email-link'}).find('a')['href'] 

당신은 클래스 또는 앵커 태그 사업부가 누락 된 경우가 더 강력하게 할 수 있으므로 당신은 링크를 얻을 수 있습니다 더 간결하게 유지하려는 경우 :

selection = soup.select('div.startup-email-linak > a') 
if not selection: 
    return None 
return selection[0]['href'] 
+0

그래도 작동하지만 소스 코드에서 이메일은 동일한 태그로 두 번 표시되며 하나만 있으면됩니다. 거기에 select_first 또는 그런 smth 아닌가요? – jjyoh

+1

그러면'soup.find ('div', { 'class': 'startup-email-link'})를 사용할 수 있습니다. find ('a') [ 'href'] ' – fodma1

+0

고마워요. – jjyoh

0

전자 메일 구문 분석이 유일한 대상이면이를 수행 할 수 있습니다. 아래의 방법을 시도해보십시오. 해당 웹 사이트 링크로 item_url 필드를 채우십시오.

import requests 
from bs4 import BeautifulSoup 

item_url = "put your url here" 
soup = BeautifulSoup(requests.get(item_url).text, "lxml") 
for email in soup.select(".startup-email-link a[href^='mailto:']"): 
    print(email['href'])