Python爬取豆瓣top250电影信息
2019-04-07 本文已影响0人
jangohe
Python爬取豆瓣top250电影信息
1.GET,POST请求
import requests
req = requests.get("https://www.baidu.com/")
print(req.status_code)
200
状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 务器错误,服务器在处理请求的过程中发生了错误 |
2.re正则表达式
- re.match函数:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
- re.search:re.search 扫描整个字符串并返回第一个成功的匹配
- re.sub:用于替换字符串中的匹配re.compile :compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和search() 这两个函数使用
- findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
- re.finditer:和findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
- re.split:split方法按照能够匹配的子串将字符串分割后返回列表
3.爬取豆瓣top250电影信息
import requests
import re
headers = {
'Referer': 'https://movie.douban.com/chart',
'Host': 'movie.douban.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
retag = re.compile(
r'.*?<em class="">(.*?)</em>' # 匹配 rank
r'.*?<span class="title">(.*?)</span>' # 匹配 名称
r'.*?<span class="title"> / (.*?)</span>'
r'.*?<span class="other"> / (.*?)</span>'
r'.*?<p class="">.*?: (.*?) .*?:(.*?)<br>.*?(\d+).*?</p>' # 匹配 导演 主演 年份
r'.*?<span class="rating_num" property="v:average">(.*?)</span>' # 匹配 评价
r'.*?<span class="inq">(.*?)</span>',
re.S)
mlists = [] #储存所有电影信息
for i in range(0, 250, 25):
url = 'https://movie.douban.com/top250?start=%s&filter=' % i
r = requests.get(url)
print(r.status_code)
r.encoding = 'utf-8';
mlist = retag.findall(r.text)
for m in mlist:
list = {
'排名': m[0],
'电影名称': m[1] + '/' + m[2] + '/' + m[3],
'导演': m[4],
'主演': m[5],
'年份': m[6],
'评分': m[7],
'短评': m[8]
}
mlists.append(list)
print('完成前%s条电影信息的录入' % i)
print(mlists)
