爬虫--requests爬取猫眼电影排行榜
'''
目标:使用requests分页爬取猫眼电影中榜单栏目中TOP100榜的所有电影信息,并将信息写入文件
URL地址:http://maoyan.com/board/4 其中参数offset表示其实条数
获取信息:{排名,图片,标题,主演,放映时间,评分}
'''
下面我们直接上代码
from requests.exceptions import RequestException import requests import re,time,json def getPage(url): '''爬取指定url页面信息''' try: #定义请求头信息 headers = { 'User-Agent': 'User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1' } #执行爬取 res = requests.get(url,headers=headers) #判断响应状态,并响应爬取内容 if res.status_code == 200: return res.text #获取爬取到的网页信息 else: return None except RequestException.URLError: return None def parsePage(html): '''解析爬取网页中的内容,并返回字段结果''' #定义解析正则表达式 pat = '<i class="board-index board-index-[0-9]+">([0-9]+)</i>.*?<img data-src="(.*?)" alt="(.*?)" class="board-img" />.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?<i class="integer">([0-9\.]+)</i><i class="fraction">([0-9]+)</i>' #执行解析 items = re.findall(pat,html,re.S) #使 . 匹配包括换行在内的所有字符 #遍历封装数据并返回 for item in items: yield { 'index':item[0], 'image':item[1], 'title':item[2], 'actor':item[3].strip()[3:], #.strip()函数去除首尾空格,[3:] 字符串>3才会执行,否则返回空 'time': item[4].strip()[5:], 'score': item[5] + item[6], } def writeFile(content): '''执行文件追加写操作''' '''执行文件追加写操作''' #print(content) with open("./result.txt",'a',encoding='utf-8') as f: f.write(json.dumps(content,ensure_ascii=False) + "\n") #json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False def main(offset): '''主程序函数,负责调度执行爬虫处理''' url = 'http://maoyan.com/board/4?offset=' + str(offset) print(url) html = getPage(url) #判断是否爬取到数据,并调用解析函数 if html: for item in parsePage(html): writeFile(item) # 判断当前执行是否为主程序运行,并遍历调用主函数爬取数据 if __name__ == '__main__': for i in range(10): main(offset=i*10) time.sleep(1)