以下是通过正则表达式爬取的猫眼电影以及豆瓣电影的相关的电影信息的代码过程。
爬取猫眼电影
分析
打开Chrome的调试工具,可发现相关的信息都在,并且以翻页的形式来得到更多的电影信息。
我们可通过其爬取需要的信息,利用正则表达式来进行文本的挖掘。
代码
|
|
爬取豆瓣电影
分析
与爬取猫眼电影信息一样,都是一样的,具体的差距还是在豆瓣上爬取信息需要cookie,具体可参考下面的代码。
代码
'''
函数目标:
爬取豆瓣Top250的电影信息
编写时间:
2018-04-01
'''
import requests
import re
if __name__ == '__main__':
print('以下为豆瓣Top250的电影信息:')
# 从页面可看到一共有十页,每页上有25个电影的信息
for i in range(0, 10):
url = "https://movie.douban.com/top250?"
header = {
'Connection': 'keep-alive',
'Cookie': 'bid=x9ipkoKiQgw; _pk_ses.100001.4cf6=*; __utma=30149280.2001666009.1522587991.1522587991.1522587991.1; __utmb=30149280.0.10.1522587991; __utmc=30149280; __utmz=30149280.1522587991.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=223695111.1530785565.1522587991.1522587991.1522587991.1; __utmb=223695111.0.10.1522587991; __utmc=223695111; __utmz=223695111.1522587991.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ll="118146"; _vwo_uuid_v2=D575771A914BC38B3B7D081C0A0296FDC|939d8f7fdff1f383a97d572dab39fa1a; _pk_id.100001.4cf6=1de732c7ac4dc22b.1522587990.1.1522588516.1522587990.; ct=y',
'Host': 'movie.douban.com',
'Referer': 'https://movie.douban.com/top250?start=25&filter=',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36}'
}
paramters = {
'start': i * 25,
'filter':''
}
tasget = requests.get(url=url, headers=header, params=paramters)
tasget.encoding = 'utf-8'
# 匹配正则表达式
infos = re.findall(r'<li>.*?<em class="">(.*?)</em>.*?alt=.*?src="(.*?)".*?"title">(.*?)</span>.*?class="title"> / (.*?)</span>.*?"other"> / (.*?)</span>.*?<p class="">(.*?) (.*?)<br>(.*?) / (.*?) / (.*?)</p>.*?average">(.*?)</span>', tasget.text, re.S) # @UndefinedVariable
# 建立一个空字典用于存储相关的信息
for each in infos:
yields = {
'index':each[0], # 排名
'img_info':each[1], # 照片地址
'name':each[2].strip() + "/" + each[3].strip() + "/" + each[4].strip(), # 影片名称
'director':each[5].strip(), # 导演
'actor':each[6], # 演员
'time_cy':each[7].strip() + each[8], # 上演时间及地区
'type':each[9].strip(), # 影片类型
'score':each[10] # 评分
}
print(yields)
最后
简单说说其中的含义,表达式.*?
是一个万能的匹配式,(.*?)
是匹配想要爬取的内容,并且每一次伴随着一个索引号,每一个索引号对应着的信息不同。利用正则表达式可方便的进行文本与代码的分开挖掘,一般在写正则表达式时用html代码中的一些词来进行过渡就可以方便的写出来了。
多说无益,还是需要自己来进行代码的测试了解的。
- 参考的博客:https://cuiqingcai.com
可根据此博客来学习更多的爬虫知识。