文章目录:
一:Python基础
二:爬虫须知
1.流程
2.遵守规则
三:HTTP请求和响应
1.相关定义
2.HTTP请求响应
2.1 完整的HTTP请求
2.2 完整的HTTP响应
3.Requests库
四:HTML
1.HTML网页结构
2.常用标签
3.BeautifulSoup库
实战:从豆瓣获取电影Top250
1.完整代码
2.运行结果
参考:Python+爬虫
一:Python基础
Python快速入门教程
二:爬虫须知
1.流程
第一步:获取网页内容(Requests库发送HTTP请求)第二步:解析网页内容(BeautifulSoup库获取HTML网页结构内容信息)第三步:储存(数据库) 或 得到更多信息(数据分析)
2.遵守规则
1.不要爬取公民隐私数据2.不要爬取受著作权保护的内容3.不要爬取国家事务国防建设和尖端技术领域
4.请求数量和频率不能过高:否则可能无异于DDos攻击5.有反扒限制就不要去爬取了:需要登录、验证码6.查看网站的robots.txt文件:了解可爬取的网页路径范围
三:HTTP请求和响应
1.相关定义
HTTP:超文本传输协议客户端和服务器之间的请求响应协议请求方法Get:获得数据Post:创建数据接收的响应数据类型HTML:text/htmlJSON:application/jsonHTML和JSON:text/html,application/json任意类型:/*/常见的状态码和状态消息200 ok 客户端请求成功300 Moved Permanently 重定向资源被永久移动到新地址400 Bad Request 客户端不能被服务器所理解401 Unauthorized 请求未经授权403 Forbidden 服务器拒绝提供服务404 Not Found 请求资源不存在500 Internal Server Error 服务器发生不可预期的错误503 Server Unavailable 服务器当前不能处理客户端的请求
2.HTTP请求响应
2.1 完整的HTTP请求
POST请求#请求行 协议版本POST/user/info?new_user=true HTTP/1.1#请求头 域名 资源路径 查询参数Host:www.douban.com/movie/top250?start=75&filter=unwatchedUser-Agent:curl/7.77.0Accept:*/*#请求体{"username":"刘鑫磊","email":"123@qq.com"}GET请求#请求行GET/user/info?new_user=true HTTP/1.1#请求头Host:www.example.comUser-Agent:curl/7.77.0Accept:*/*
2.2 完整的HTTP响应
#状态行:协议版本 状态码 状态消息 HTTP/1.1 200 OK #响应头 Date:Fri,27 Jan 2023 02:10:48 GMT Content-Type:text/html;charset=utf-8 #响应体 <!DOCTYPE html><head><title>首页</title></head><body><h1>刘鑫磊</h1><p>非常棒</p></body> </html>
3.Requests库
#在终端输入(视图——>工具窗口——>终端):pip install requests import requests#把爬虫程序伪装成正常的浏览器 #任意网页——>鼠标右键——>检查——>Network——>User-Agent——>复制过来 headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"}response=requests.get("https://movie.douban.com/top250",headers=headers) print(response) print(response.status_code) if response.ok:# 获取响应体内容print(response.text) else:print("请求失败")
四:HTML
1.HTML网页结构
<!DOCTYPE HTML> <html><body><h1>我是标题</h1><p>我是一段文字</p></body> </html>
2.常用标签
标题:<h1></h1>文本段落:<p></p>换行:<br>图片:<img src="图片链接">链接:<a href="链接地址" target="_self"></a> target="_blank"容器:<span></span> 内联元素不会独占一块,一行可写多个 盒子:<div></div> 块级有序列表:<ol><li></li></ol> 无序列表:<ul><li></li></ul>表格<table><thead> #头部<tr> #行<td></td> #列</tr><thead><tbody> #主体<tr> # 行<td></td> # 列</tr></tbody></table>class属性:定义元素的类名称,帮助我们分组class="content" class="review"
“1.html”文件
<!DOCTYPE html> <html><head><title>我是标题</title></head><body><h1>我是一级标题</h1><h2>我是二级标题</h2><h6>我是六级标题</h6><p>我是文本段落</p><br><b>加粗字体</b><i>斜体</i><u>下划线</u><img src="图片链接"><a href="https://www.baidu.com" target="_self">百度链接</a><div style="background-color:red"></div><span></span> <ol><li>我是第一项</li><li>我是第二项</li></ol><ul><li>我是第一项</li><li>我是第二项</li></ul><table border="1"><thead> <tr> <td>头部1</td> <td>头部2</td> </tr><thead><tbody> <tr> <td>111</td> <td>222</td> </tr></tbody></table></body> </html>
3.BeautifulSoup库
# pip install bs4 from bs4 import BeautifulSoup import requestscontent = requests.get("http://www.example.com/").text soup=BeautifulSoup(content,"html.parser") #解析内容,指定解析器(解析成树状结构)print(soup.p)#举例 p标签内容 all_prices=soup.find_all("p",attrs={"class":"price_color"}) #p标签,类:类名 for price in all_prices:print(price.string[2:]) #会把标签包围的文章显示出来 [2:]大于等于2#举例 h3里面的a标签内容 all_titles=soup.find_all("h3") for titel in all_titles:all_links=titel.find_all("a")for link in all_links:print(link.string)
实战:从豆瓣获取电影Top250
1.完整代码
#pip install requests import requests # pip install bs4 from bs4 import BeautifulSoup#把爬虫程序伪装成正常的浏览器 #任意网页——>鼠标右键——>检查——>Network——>User-Agent——>复制过来 headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"}for strat_num in range(0,250,25): #每页有25个电影#print(strat_num)response = requests.get(f"https://movie.douban.com/top250?start={strat_num}", headers=headers) # 地址html = response.textsoup = BeautifulSoup(html, "html.parser") # 获取网页结构内容all_titles = soup.findAll("span", attrs={"class": "title"}) # span标签 的里面类class=titlefor title in all_titles:# print(title.string)title_string = title.stringif "/" not in title_string: # 不带斜杠的中文名字print(title.string)
2.运行结果
G:\python\class1\venv\Scripts\python.exe G:\python\class1\demo1.py 肖申克的救赎 霸王别姬 阿甘正传 泰坦尼克号 这个杀手不太冷 千与千寻 美丽人生 星际穿越 辛德勒的名单 盗梦空间 楚门的世界 忠犬八公的故事 海上钢琴师 三傻大闹宝莱坞 放牛班的春天 机器人总动员 疯狂动物城 无间道 控方证人 大话西游之大圣娶亲 熔炉 教父 触不可及 当幸福来敲门 末代皇帝 寻梦环游记 龙猫 怦然心动 活着 蝙蝠侠:黑暗骑士 哈利·波特与魔法石 指环王3:王者无敌 我不是药神 乱世佳人 飞屋环游记 素媛 哈尔的移动城堡 十二怒汉 何以为家 摔跤吧!爸爸 让子弹飞 猫鼠游戏 天空之城 鬼子来了 少年派的奇幻漂流 海蒂和爷爷 钢琴家 大话西游之月光宝盒 指环王2:双塔奇兵 闻香识女人