主函数都一样,只是解析的方式(parse_one_page)不一样
效果:
1 霸王别姬 主演:张国荣,张丰毅,巩俐 上映时间:1993-01-01(中国香港) 9.6 2 肖申克的救赎 主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿 上映时间:1994-10-14(美国) 9.5 3 罗马假日 主演:格利高里·派克,奥黛丽·赫本,埃迪·艾伯特 上映时间:1953-09-02(美国) 9.1 4 这个杀手不太冷 主演:让·雷诺,加里·奥德曼,娜塔莉·波特曼 上映时间:1994-09-14(法国) 9.5 5 教父 主演:马龙·白兰度,阿尔·帕西诺,詹姆斯·肯恩 上映时间:1972-03-24(美国) 9.3 6 泰坦尼克号 主演:莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩 上映时间:1998-04-03 9.5 7 龙猫 主演:日高法子,坂本千夏,糸井重里 上映时间:1988-04-16(日本) 9.2 8 唐伯虎点秋香 主演:周星驰,巩俐,郑佩佩 上映时间:1993-07-01(中国香港) 9.2 9 魂断蓝桥 主演:费雯·丽,罗伯特·泰勒,露塞尔·沃特森 上映时间:1940-05-17(美国) 9.2 10 千与千寻 主演:柊瑠美,入野自由,夏木真理 上映时间:2001-07-20(日本) 9.3 11 乱世佳人 主演:费雯·丽,克拉克·盖博,奥利维娅·德哈维兰 上映时间:1939-12-15(美国) 9.1 12 喜剧之王 主演:周星驰,莫文蔚,张柏芝 上映时间:1999-02-13(中国香港) 9.2 13 天空之城 主演:寺田农,鹫尾真知子,龟山助清 上映时间:1992 9.1 14 大闹天宫 主演:邱岳峰,毕克,富润生 上映时间:1965-12-31 9.0 15 辛德勒的名单 主演:连姆·尼森,拉尔夫·费因斯,本·金斯利 上映时间:1993-12-15(美国) 9.2 16 音乐之声 主演:朱莉·安德鲁斯,克里斯托弗·普卢默,埃琳诺·帕克 上映时间:1965-03-02(美国) 9.0 17 春光乍泄 主演:张国荣,梁朝伟,张震 上映时间:1997-05-30(中国香港) 9.2
一、正则表达式
import json
import requests
from requests.exceptions import RequestException
import re
import time
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
def parse_one_page(html):
pattern = re.compile('.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?).*?releasetime.*?>(.*?).*?integer.*?>(.*?).*?fraction.*?>(.*?).*? ',re.S)
items = re.findall(pattern,html)
for item in items:
yield {
'index':item[0],
'image':item[1],
'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()
}
print(item)
def write_to_file(content):
with open('result.txt','a',encoding='utf-8') as f:
print(type(json.dumps(content)))
f.write(json.dumps(content,ensure_ascii=False)+'\n')
def main(offset):
url = "http://maoyan.com/board/4?offset="+str(offset)
html = get_one_page(url)
for item in parse_one_page(html):
write_to_file(item)
if __name__ == '__main__':
for i in range(10):
main(offset=i*10)
time.sleep(1)
二、XPath
import requests
from lxml import etree
import time
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
def parse_xpath(html):
html = etree.HTML(html)
results = html.xpath('//dd')
for result in results:
rank = result.xpath('i/text()')[0].strip()
title = result.xpath('div//p[1]/a/@title')[0].strip()
star = result.xpath('div//p[2]/text()')[0].strip()
releasetime = result.xpath('div//p[3]/text()')[0].strip()
score_0 = result.xpath('div/div/div/p/i[1]/text()')[0].strip()
score_1 = result.xpath('div/div/div/p/i[2]/text()')[0].strip()
score = score_0+score_1
print(rank,title,star,releasetime,score)
return result
def main(offset):
url = "http://maoyan.com/board/4?offset="+str(offset)
html = get_one_page(url)
aa = parse_xpath(html)
if __name__ == '__main__':
for i in range(10):
main(offset=i*10)
time.sleep(1)
三、Beautiful Soup
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
def parse_xpath(html):
soup = BeautifulSoup(html,'lxml')
for i,movie in enumerate(soup.dl.contents):
if movie!="\n":
rank = movie.i.text
title = movie.a["title"]
star = movie.div.div.div.find_all(class_='star')[0].string.strip()
releasetime = movie.div.div.div.find_all(class_='releasetime')[0].string.strip()
score = movie.div.div.find_all(class_='integer')[0].string.strip()+movie.div.div.find_all(class_='fraction')[0].string.strip()
print(rank,title,star,releasetime,score)
def main(offset):
url = "http://maoyan.com/board/4?offset="+str(offset)
html = get_one_page(url)
aa = parse_xpath(html)
if __name__ == '__main__':
for i in range(10):
aa = main(offset=i*10)
time.sleep(1)
四、Pyquery
import requests
from pyquery import PyQuery as pq
import time
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
def parse_xpath(html):
doc = pq(html)
dds = doc('.board-wrapper dd').items()
for dd in dds:
content = dd.text().split("\n")
rank = dd.text().split("\n")[0]
title = dd.text().split("\n")[1]
star = dd.text().split("\n")[2]
releasetime = dd.text().split("\n")[3]
score = dd.text().split("\n")[4]
print(rank,title,star,releasetime,score)
def main(offset):
url = "http://maoyan.com/board/4?offset="+str(offset)
html = get_one_page(url)
aa = parse_xpath(html)
if __name__ == '__main__':
for i in range(10):
aa = main(offset=i*10)
time.sleep(1)