爬虫原理
- 发送数据
- 获取数据
- 解析数据
- 保存数据
requests请求库
res = requests.get(url="目标网站地址")
获取二进制流方法:res.content
获取文本方法:res.text
re正则模块
re.findall("匹配规则","获取到的数据","匹配模式")
re.findall('<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人评价</span>', response.text, re.S)
贪婪匹配:.*? 过滤任何内容
非贪婪匹配:(.*?) 提供内容
with open() 保存数据
with open(): # wt(write + txt) wb (write + bytes)
爬虫精髓
- 分析网站的通信流程
- 分析查找数据从何而来
分析目标网站的反爬策略
根据目标网站的反爬策略编写攻击手段,获取数据
json格式化
json是一种第三方的数据格式
python中可以使用方法将json转换为可读取的数据类型
json.jumps() #将python数据格式转换为json格式 json.loads() #将json格式转换为python数据格式
爬取豆瓣电影排行榜top250
#导入requests库 import requests import json #分析豆瓣网站每页数据的url,利用for循环将每页进行 解析数据操作 num = 0 for i in range(10): url = f"https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start={num}&limit=20" num += 20 #获取数据并将获取到的json数据转换为python格式数据类型 w = requests.get(url=url) w = json.loads(w.text) #利用json转换完成后为列表类型,可在上面用print(type())查看类型,利用for循环将列表的每个元素读取,进行索引取值。 for line in w: move_name = line["title"] move_grade = line["rating"][0] move_url = line["url"] move_type = line["types"] move_rank = line["rank"] move_list = f''' 电影名字:{move_name} 电影分数:{move_grade} 电影链接:{move_url} 电影类型:{move_type} 电影排行:{move_rank} ''' #保存数据 with open("douban2.txt","a",encoding="utf8") as f: f.write(move_list + "\n")