python 抢票代码 猫眼演出_Python爬虫-猫眼电影排行

爬虫的目标

爬取猫眼电影TOP100的电影名称,时间,评分,图片等信息

抓取分析

查看网页源代码,找到对应的目标信息,发现一部电影对应的源代码是一个dd节点

抓取首页

为了方便,这里先抓取第一页的内容,运行之后,可以查看到网页的源代码,之后需要对页面进行解析。

import requests

def get_one_page(url):

headers = {

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

} #头信息,爬取一些网站时需要加上,否则可能会爬取失败

response = requests.get(url,headers=headers)

if (response.status_code==200):

return response.text #返回网页内容

return None

def main():

url = 'http://www.maoyan.com/board/4'

html = get_one_page(url)

print(html)

main()

正则匹配

正则表达式匹配对应的电影排名,图片,名称,内容,主演,发布时间,评分等7个内容

首先先看看正则匹配电影排名:

.?board-index.?>(.*?)

(.*?)是方便可以用group()得到所要的结果

下面贴出爬取以上7种的正则表达式(较复杂,在后续的文章中会改进,这里只做简单使用)

.?board-index.?>(.?).?data-src="(.?)".?name.?a.?>(.?).?star.?>(.?).?releasetime.?>(.?).?integer.?>(.?).?fraction.?>(.?).?

通过调用findall()方法提取所有内容,接下来,我们定义一个解析页面的方法parse_one_page(),代码如下

def parse_one_page(html):

pattern = re.compile('

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?).*?releasetime.*?>(.*?).*?integer.*?>(.*?).*?fraction.*?>(.*?).*?',re.S)

items = re.findall(pattern,html)

print(items)

成功将一页的信息打印出来,以列表的形式,下面是输出结果:

将提取的匹配结果从列表转换成字典格式

def parse_one_page(html):

pattern = re.compile('

.*?board-index.*?>(.*?).*?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()

}

写入文件

dumps是将dict转化成str格式

content是一个字典类型的数据,一部电影的提取结果

ensure_ascii=False保证写入文件的是中文而不是Unicode编码

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')

分页爬取

if __name__=='__main__':

for i in range(10):

main(offset=i*10)

time.sleep(1)

本章总结

通过本次练习,加强掌握requests和re库的用法,这只是一个简单的爬虫实例,后续会继续更新更多的爬虫文章

ps:参考教程:Python3爬虫开发实战

源代码会在后续中上传至github

你可能感兴趣的:(python,抢票代码,猫眼演出)