2017-12-07 1 views
0

안녕하세요 여러분, 저는 초보자이며 웹 스크래핑에서 URL 링크가있는 IF ELSE 함수를 사용하려고합니다. 부서 64에서 66까지의 모든 페이지를 선택하고 싶습니다. 내 URL은 http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/{}/0 ({} = 64 또는 65 또는 66)입니다. 내 루프가 작동하고 64 페이지를 모두 선택합니다.하지만 65 세 안에있을 때 페이지가 하나 뿐이므로 코드 줄 last_page = soup.find('ul', class_='pagination').find('li', class_='next').a['href'].split('=')[1]을 사용할 수 없습니다.단 하나의 페이지에서 오류를 피하는 방법 URL- 파이썬 - 웹 스크 레이 핑

import requests 
from bs4 import BeautifulSoup 
url_list = ['http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/{}/0'] 
for link in url_list: 
    r=requests.get(link) 
    soup = BeautifulSoup(r.content, "html.parser") 
    page_Url_test=[link.format(i) for i in range(64, 66)] 
    for depart_page in page_Url_test: 
     depart_page1=str(depart_page)+"?page={}" 
     r=requests.get(depart_page1) 
     soup = BeautifulSoup(r.content, "html.parser") 
     last_page = soup.find('ul', class_='pagination').find('li', class_='next').a['href'].split('=')[1] 
     dept_page_Url=[depart_page1.format(i) for i in range(0, int(last_page)+1)] 
print(dept_page_Url) 

이 같은 ELSE는 IF를 통합하는 시도 :

for depart_page in page_Url_test: 
    depart_page1=str(depart_page)+"?page={}" 
    r=requests.get(depart_page1) 
    soup = BeautifulSoup(r.content, "html.parser") 
    if len(depart_page1) == 0 : 
     dept_page_Url=depart_page1 
    else: 
     last_page = soup.find('ul', class_='pagination').find('li', class_='next').a['href'].split('=')[1] 
     dept_page_Url=[depart_page1.format(i) for i in range(0, int(last_page)+1)] 
print(dept_page_Url) 

을하지만 그것은 작동하지 않습니다 내 코드를 여기에. 내 코드에 어떻게 대처할 수 있습니까? 하나의 페이지 만 있으면 첫 번째 페이지 만 선택하고 다음 단계는 수행합니까? 실마리가 있습니까? 혼자 찾을 수있는 충분한 지식이없는 ... 당신에게 이미 지적 선생님 t.m.adam으로 많은

+0

65 페이지 더 .pagination 요소가 없다, 그래서 당신의 조건'이 될 경우 soup.find (class_ = '한다 페이지 매김 ') :' –

답변

1

감사, 당신은 아래 방법처럼 시도 할 수 있습니다. 또한 간결하게 만들기 위해 코드를 수정했습니다.

import requests 
from bs4 import BeautifulSoup 

url_list = 'http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/{}/0' 
for link in [url_list.format(page) for page in range(64,67)]: 
    res = requests.get(link) 
    soup = BeautifulSoup(res.text,"lxml") 
    depart_page = str(link) + "?page={}" 
    if soup.find('ul', class_='pagination'): 
     last_page = soup.find('ul', class_='pagination').find('li', class_='next').a['href'].split('=')[1] 
     dept_page_Url = [depart_page.format(i) for i in range(0, int(last_page)+1)] 
     print(dept_page_Url) 
필요

추가 방법 :

이 결과
if soup.find('ul', class_='pagination'): 
    last_page = soup.find('ul', class_='pagination').find('li', class_='next').a['href'].split('=')[1] 
    dept_page_Url = [depart_page.format(i) for i in range(0, int(last_page)+1)] 
    print(dept_page_Url) 
else: 
    print(link) 

:

['http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/64/0?page=0', 'http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/64/0?page=1', 'http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/64/0?page=2'] 
['http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/66/0?page=0', 'http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/66/0?page=1', 'http://www.pour-les-personnes-agees.gouv.fr/annuaire-accueil-de-jour/66/0?page=2'] 
+0

설명과 코드를 좀 더 간결하게 해주셔서 고맙습니다. 나는 많이 배웠다. 나는 1question을 가지고있다.이 부분 이후에 나는 데이터를 스크랩하고 부서 64와 66에서 작동하지만 65로는 작동하지 않는다. 나는 하나의 페이지 만 가지고 있기 때문에 이것을 알고있다. 사실이 데이터도 스크랩해야한다. 아래 코드 내에서 : –

+0

'for dept_page_Url :''r = requests.get (test)''soup.find_all의 메종에 대한 soup = BeautifulSoup (r.content, "html.parser" { "id": "cnsa_results-list"}) : maison.find_all ("div", { "class": "row"}) : general.find_all ("div", { "class": "cnsa_results-tags2 col col-xs-10 col-sm-10"}) :''description_name = description.text''print (description_name)' –

+0

편집 된 부분을 참조하십시오. – SIM