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 = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6776.400 QQBrowser/10.3.2577.400"
}
for i in range(0,250,25):
url = 'https://movie.douban.com/top250?start=%s&filter=' % i
res = requests.get(url, headers = headers)
pattern = re.compile(r'.*?<em class="">(\d+)</em>.*?<span class="title">(.*?)</span>.*?<p class="">.*?: (.*?)[ |\.\.\.].*? (\d+).*?</p>', re.S)
mlist = pattern.findall(res.text)
for m in mlist:
movie_data = DataFrame([(m[0], m[1], m[2], m[3])],columns=['rank', 'name', 'director','year'])
top_250 = pd.concat([top_250,movie_data],ignore_index=True)
top_250.to_csv("top_250.csv", encoding = "utf-8")