python 파충류 사례: 고양이 눈 영화 Top 10 영화 관련 정보 (코드 초 상세 해석)
6900 단어 파충
Top 100 차 트 는 모두 10 페이지 로 나 뉘 는데 관찰 을 통 해 각 페이지 의 URL 은 get 요청 매개 변수 offset 변화 와 구별 된다.
그래서 URL 은 다음 과 같 습 니 다:
url = 'http://www.maoyan.com/board/4?offset=' + str(page_num)
한 페이지 의 html 코드 를 가 져 와 함수 로 쓰 십시오:
# html
def get_one_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
}
# requests.get(url,headers) ,
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
저희 가 캡 처 한 내용 은 6 가지 입 니 다. 차 트 번호, 사진 주소, 영화 이름, 배우, 상영 시간 (국가), 득점 입 니 다.
관찰 한 결과 모든 영화 의 정 보 는 html 의 탭 에 있 습 니 다. 다음 과 같 습 니 다.
정규 표현 식 을 사용 하여 우리 가 필요 로 하 는 정보 에 대한 해석 함 수 는 다음 과 같 습 니 다.
# ,
def parse_one_page(html):
# .*?board-index.*?>(.*?)
# data-src="(.*?)"
# (.*?)
# (.*?)
# (.*?)
# (.*?)(.*?)
pattern = re.compile(' .*?board-index.*?>(.*?).*?data-src="(.*?)".*?(.*?).*?(.*?).*?(.*?).*?(.*?)(.*?).*? ',re.S)
items = re.findall(pattern,html)
for item in items:
# yield , (generator),
# iterable , 。
# yield , , 。
# , , 。
# for , 。 , 。
yield {
'index':item[0].strip(),
'image':item[1].strip(),
'title':item[2].strip(),
'actor':item[3].strip()[3:] if len(item[3])>3 else '',
'time':item[4].strip()[5:] if len(item[4])>5 else '',
'score':item[5].strip() + item[6].strip()
}
그리고 우리 가 얻 은 정 보 를 txt 파일 에 기록 하고 모든 영화 정 보 를 기록 하 는 함 수 는 다음 과 같 습 니 다.
# ,
def write_one_movie(content):
with open('maoyanResult.txt','a',encoding='utf-8') as f:
# JSON dumps() ,
# ensure_ascii False, Unicode
# print(type(json.dumps(content)))
f.write(json.dumps(content,ensure_ascii=False) + '
')
# , str()
# f.write(str(content) + '
')
그 다음 에 상기 세 개의 함 수 를 모 아서 한 페이지 의 데 이 터 를 얻 는 총 제어 함 수 를 얻 을 수 있 습 니 다.
#
def main_one_page(page_num):
maoyan_url = 'http://www.maoyan.com/board/4?offset=' + str(page_num)
html = get_one_page(maoyan_url)
for item in parse_one_page(html):
write_one_movie(item)
마지막 으로 통합 하여 페이지 별로 올 라 가서 Top 100 을 모두 내 려 옵 니 다.
if __name__ == '__main__':
if os.path.exists('maoyanResult.txt'):
os.remove('maoyanResult.txt')
for i in range(0,99,10):
print(' {} ...'.format(int(i/10 + 1)))
main_one_page(i)
time.sleep(1)
최종 결 과 는 다음 과 같다.
최종 코드 통합
import requests
import re
import json
import os
import time
# html
def get_one_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
}
# requests.get(url,headers) ,
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
# ,
def parse_one_page(html):
# .*?board-index.*?>(.*?)
# data-src="(.*?)"
# (.*?)
# (.*?)
# (.*?)
# (.*?)(.*?)
pattern = re.compile(' .*?board-index.*?>(.*?).*?data-src="(.*?)".*?(.*?).*?(.*?).*?(.*?).*?(.*?)(.*?).*? ',re.S)
items = re.findall(pattern,html)
for item in items:
# yield , (generator),
# iterable , 。
# yield , , 。
# , , 。
# for , 。 , 。
yield {
'index':item[0].strip(),
'image':item[1].strip(),
'title':item[2].strip(),
'actor':item[3].strip()[3:] if len(item[3])>3 else '',
'time':item[4].strip()[5:] if len(item[4])>5 else '',
'score':item[5].strip() + item[6].strip()
}
# ,
def write_one_movie(content):
with open('maoyanResult.txt','a',encoding='utf-8') as f:
# JSON dumps() ,
# ensure_ascii False, Unicode
# print(type(json.dumps(content)))
f.write(json.dumps(content,ensure_ascii=False) + '
')
# , str()
# f.write(str(content) + '
')
#
def main_one_page(page_num):
maoyan_url = 'http://www.maoyan.com/board/4?offset=' + str(page_num)
html = get_one_page(maoyan_url)
for item in parse_one_page(html):
write_one_movie(item)
if __name__ == '__main__':
if os.path.exists('maoyanResult.txt'):
os.remove('maoyanResult.txt')
for i in range(0,99,10):
print(' {} ...'.format(int(i/10 + 1)))
main_one_page(i)
time.sleep(1)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(1) 분포 식 파충류 Scrapy 는 어떻게 해 야 하나 요 - 설치Scrapy 의 설치 에 대해 인터넷 을 샅 샅 이 뒤 졌 습 니 다. 하나씩 설치 하 는 것 은 솔직히 좀 번 거 롭 습 니 다. 그럼 원 키 로 설치 한 것 이 있 습 니까?답 은 분명히 있 습 니 다. 다음은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.