python3爬虫项目实战(一)抓取猫眼电影排行榜

感觉爬虫这种东西久了容易忘,还是写一篇博客来记录一下,以后需要爬取页面的话可以作为参考框架
本篇博客记录的是猫眼电影排行榜电影信息的爬取过程。
页面情况大概是这样的:

电影排行榜

现在我们需要爬取到电影的排名、电影名、主演、上映时间、图片链接、评分这六个信息。
爬虫最重要的一步就是要分析网页的源码:
猫眼电影排行榜部分源码.png
上面的一部分源码是第一部《霸王别姬》对应的源码信息,在观察网页代码之后,可以发现,每一部电影都是包含在一对"
"标签里,我们只需要写出关于"
"的正则表达式,就可以进行循环匹配,从而可以得到每一部电影的信息。
先给出我写的正则表达:

s = '
.*?board-index.*?>(.*?).*?title="(.*?)".*?poster-default.*?src="(.*?)".*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
'

其中开头和结尾决定了只匹配'

'标签的内容;'.*?'代表以非贪婪方式匹配任意多个字符,这个非贪婪模式是我觉得基本上每次爬虫都会用到的,为了获取排名,即为''标签的内容,我们先找到'',再匹配它前面的内容(排名),通过紧接着排名的符号'>'和后面的符号''我们就可以锁定‘1’的位置,再加上一个非贪婪匹配即可,小括号的作用是匹配之后可以返回分组,拿到自己想要的内容。
其他的信息匹配原理基本一样,需要耐下心来研读,其实只要练过一次手了,就都会比较简单。
完成正则表达式的匹配模式之后通过

pattern = re.compile(s,re.S)
items = re.findall(pattern,html)

找到所有的匹配结果,这里的items是一个元素为列表的列表(二维列表),每一个元素列表包含了要匹配的信息(6个信息),元素的个数即为该网页的电影个数(这里只匹配单张网页,不进行跳转)
下面给出全部代码

import requests
import re
def get_one_page(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
        #如果出现乱码,那么需要加上这条请求头
        'Accept-Language':'zh-CN,zh;q=0.9'
    }
    response = requests.get(url,headers=headers)
    if response.status_code == 200:
        return response.text
    return None
def main():
    url = 'https://maoyan.com/board/4'
    html = get_one_page(url)
    results = parse_one_page(html)
    for result in results:
        print(result)
#正则提取
def parse_one_page(html):
    s = '
.*?board-index.*?>(.*?).*?title="(.*?)".*?poster-default.*?src="(.*?)".*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
' pattern = re.compile(s,re.S) items = re.findall(pattern,html) for item in items: print(item) yield { 'index':item[0], 'title':item[1], 'image':item[2].strip(), 'actor':item[3].strip()[3:] if len(item[3])>3 else '', 'time':item[4].strip(), 'score':item[5].strip()+item[6].strip() } main()

目前该代码是可用的,以后网站如果有更新源代码的情况就不好保证了,只是作为一个参考模板。

运行代码以后,应该会出现下面的结果

代码运行结果

这样,拿到了数据,就可以进行你想要的的操作了。
下篇预告:爬取街拍美图

你可能感兴趣的:(python3爬虫项目实战(一)抓取猫眼电影排行榜)