이 플러그인은 HTML을 포함한 많은 콘텐츠를 쉽게 볼 수 있습니다
두반 영화 순위 상위 250위 웹페이지를 열어보면 각 페이지에 25편의 영화가 있고 총 10페이지이며 각 영화의 URL이 나와 있습니다. 페이지의 특징은 다음과 같습니다.
http://movie.douban.com/top250?start=0
http://movie.douban.com/top250?start=25
http:/ /movie.douban.com/top250?start=50
http://movie.douban.com/top250?start=75
.... ..
유추하자면 다음 0, 25,...225를 처리하려면 루프만 사용하면 됩니다.
웹페이지에서 중국 영화 이름을 클릭하고 마우스 오른쪽 버튼을 클릭한 다음 "요소 보기"를 클릭하면 HTML 소스 코드를 볼 수 있습니다.
영화 이름은 다음과 같습니다. 에 들어가고, 동시에 에는 영문 이름도 들어간다.
정규식 (.*)을 사용하여 영화의 중국어 이름과 영어 이름을 일치시킬 수 있지만 여기서는 중국어 이름만 가져오려고 하므로 필터링해야 합니다. 영어 이름.
Find(str,pos_start,pos_end) 함수를 사용하여 필터링 방법을 구현하면 영어 이름 ' ' 및 '/'의 고유한 기능을 제거할 수 있습니다. 자세한 내용은 코드를 참조하세요.
3. 코드 구현
여기의 코드는 비교적 간단하므로 함수를 정의할 필요가 없습니다.
#!/usr/bin/python # -*- coding: utf-8 -*- # import requests,sys,re from bs4 import BeautifulSoup reload(sys) sys.setdefaultencoding('utf-8') print '正在从豆瓣电影Top250抓取数据......' for page in range(10): url='https://movie.douban.com/top250?start='+str((page-1)*25) print '---------------------------正在爬取第'+str(page+1)+'页......--------------------------------' html=requests.get(url) html.raise_for_status() try: soup=BeautifulSoup(html.text,'html.parser') soup=str(soup) # 利用正则表达式需要将网页文本转换成字符串 title=re.compile(r'<span class="title">(.*)</span>') names=re.findall(title,soup) for name in names: if name.find(' ')==-1 and name.find('/')==-1: # 剔除英文名(英文名特征是含有' '和'/') print name # 创建名称,评分 except Exception as e: print e print '爬取完毕!'