HTTP协议与使用Python获取数据并写入MySQL
一、Http协议
二、Https协议
三、使用Python获取数据
(1)urlib
(2)GET请求
(3)POST请求
四、爬取豆瓣电影实战
1.思路
(1)在浏览器中输入https://movie.douban.com/j/search_tags?type=movie会得到显示的电影的分类标签,下面以“热门”为例
{"tags":["热门","最新","经典","可播放","豆瓣高分","冷门佳片","华语","欧美","韩国","日本","动作","喜剧","爱情","科幻","悬疑","恐怖","成长"]}
(2)在浏览器中输入https://movie.douban.com/进入豆瓣首页,然后下拉到“最近热门电影”,然后点击“更多”,浏览器中显示的url为https://movie.douban.com/explore#!type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0,即表示热门电影的第一页中的20部影片。
(3)下拉至底部,点击“显示更多”一下,则此时的url变为https://movie.douban.com/explore#!type=movie&tag=热门&sort=recommend&page_limit=20&page_start=20,也就表示第二页中的20部影片。
(4)在浏览器中输入下面的url会得到20个json格式的字符串:https://movie.douban.com/j/search_subjects?type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0。
(5)针对每个url,如果返回的结果中存在数据,那么就将page_start增加20继续执行GET请求,直到不再返回数据为止。
2.代码实现
import urllib.request from urllib import parse import json # 获得全部电影标签 url = 'https://movie.douban.com/j/search_tags?type=movie' # 需要将中文汉字转化成十六进制的形式,否则会报编码错误 print(parse.quote('热门')) request = urllib.request.Request(url=url) response = urllib.request.urlopen(request, timeout=20) # 获得json形式的字符串 result = response.read() print(result) # 将json形式的字符串解析成字典 result = json.loads(result) print(result) # 将取字典的标签字段存储到列表中 tags = result['tags'] print(tags) # 定义一个列表存储电影的基本信息 movies = [] # 分别处理每个tag for tag in tags: print(tag) tag = parse.quote(tag) print(tag) start = 0 # 不断请求,直到返回结果为空 while True: # 拼接需要请求的url url = 'https://movie.douban.com/j/search_subjects?' \ 'type=movie&tag=' + tag + '&sort=recommend&page_limit=20&page_start=' + str(start) print(url) request = urllib.request.Request(url=url) response = urllib.request.urlopen(request, timeout=20) # 获得json形式的字符串 result = response.read() print(result) # 将json形式的字符串解析成字典 result = json.loads(result) print(result) # 将取字典的标签字段存储到列表中 result = result['subjects'] print(result) # 循环跳出条件 if len(result) ==0: break # 将每一条记录都添加到movies列表中 for item in result: movies.append(item) # 修改起始位置,相当于点击"显示更多" start += 20 print(len(movies))
儿女情长什么的,最影响我们闯荡江湖了。