https://www.blogforacure.com/members.php 링크에서 웹 페이지를 구문 분석하기 위해 다음 코드를 사용하고 있습니다 . 코드는 주어진 페이지의 모든 구성원의 링크를 반환 할 것으로 예상됩니다.
from bs4 import BeautifulSoup
import urllib
r = urllib.urlopen('https://www.blogforacure.com/members.php').read()
soup = BeautifulSoup(r,'lxml')
headers = soup.find_all('h3')
print(len(headers))
for header in headers:
a = header.find('a')
print(a.attrs['href'])
하지만 위 페이지에서 처음 10 개의 링크 만 얻습니다. prettify 옵션을 인쇄하는 동안에도 처음 10 개의 링크 만 표시됩니다.
결과는 https://www.blogforacure.com/site/ajax/scrollergetentries.php
엔드 포인트에 AJAX 요청을 작성하여 동적으로로드됩니다 .
requests
웹 스크래핑 세션 을 유지 하여 코드에서 시뮬레이션하십시오 .
from bs4 import BeautifulSoup
import requests
url = "https://www.blogforacure.com/site/ajax/scrollergetentries.php"
with requests.Session() as session:
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
session.get("https://www.blogforacure.com/members.php")
page = 0
members = []
while True:
# get page
response = session.post(url, data={
"p": str(page),
"id": "#scrollbox1"
})
html = response.json()['html']
# parse html
soup = BeautifulSoup(html, "html.parser")
page_members = [member.get_text() for member in soup.select(".memberentry h3 a")]
print(page, page_members)
members.extend(page_members)
page += 1
현재 페이지 번호와 멤버 이름을 누적 한 페이지 당 멤버 목록을 목록으로 인쇄합니다 members
. 이름이 포함되어 있으므로 인쇄 된 내용을 게시하지 않습니다.
의도적으로 루프를 끝없이 떠났습니다. 종료 조건을 파악하십시오. 때 수 있음 response.json()
오류가 발생합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다