Python爬取豆瓣top250電影信息
1.GET,POST請(qǐng)求
import requests
req = requests.get("https://www.baidu.com/")
print(req.status_code)
200
狀態(tài)碼
分類 | 分類描述 |
---|---|
1** | 信息焰轻,服務(wù)器收到請(qǐng)求朝捆,需要請(qǐng)求者繼續(xù)執(zhí)行操作 |
2** | 成功帜篇,操作被成功接收并處理 |
3** | 重定向套耕,需要進(jìn)一步的操作以完成請(qǐng)求 |
4** | 客戶端錯(cuò)誤余耽,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求 |
5** | 務(wù)器錯(cuò)誤眉孩,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤 |
2.re正則表達(dá)式
- re.match函數(shù):嘗試從字符串的起始位置匹配一個(gè)模式渐苏,如果不是起始位置匹配成功的話,match()就返回none
- re.search:re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配
- re.sub:用于替換字符串中的匹配re.compile :compile 函數(shù)用于編譯正則表達(dá)式骄呼,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象共苛,供 match() 和search() 這兩個(gè)函數(shù)使用
- findall:在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表蜓萄,如果沒(méi)有找到匹配的隅茎,則返回空列表
- re.finditer:和findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串嫉沽,并把它們作為一個(gè)迭代器返回
- 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>' # 匹配 導(dǎo)演 主演 年份
r'.*?<span class="rating_num" property="v:average">(.*?)</span>' # 匹配 評(píng)價(jià)
r'.*?<span class="inq">(.*?)</span>',
re.S)
mlists = [] #儲(chǔ)存所有電影信息
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],
'導(dǎo)演': m[4],
'主演': m[5],
'年份': m[6],
'評(píng)分': m[7],
'短評(píng)': m[8]
}
mlists.append(list)
print('完成前%s條電影信息的錄入' % i)
print(mlists)
image.png