python爬虫入门通用框架【小白向】
本帖最后由 riwfhiu 于 2021-1-6 23:49 编辑为了回应那些私信我怎么学习爬虫看什么视频,想爬某某网站图片怎么改代码,怎么获取页面任意元素的属性值。。。
鸽了这么久,它终于来了,requests库的通用爬虫框架!本文纯小白入门向,已入门的或者大佬轻点喷,我自己也是小白
爬虫三步走战略:
一.请求网址
二.解析定位
三.保存数据
不讲虚道理,直接上两个实例:
1.获取百度页面标题“新闻”文本,并写入txt
2.获取百度logo图片,并写入图片png
https://static.52pojie.cn/static/image/hrline/1.gif
1.伪装访问请求头:按F12 >> Network >> 目标网址 >> 找到请求头
https://static.52pojie.cn/static/image/hrline/4.gif
2.定位元素(文本):右键菜单 >> 审查元素
https://static.52pojie.cn/static/image/hrline/4.gif
3.定位元素(图片):同理右键菜单 >> 审查元素
https://static.52pojie.cn/static/image/hrline/1.gif
'''
需要两个库,打开cmd进行安装
pip3 install requests
pip3 install lxml
'''
import requests,json
from lxml import etree
#=====================================请求区==========================================#
#get模式,获取网页源码,传入参数:url(字符串)
def gethtml(url):
#伪装头文件,F12打开浏览器,刷新一次:Network > 选目标链接(默认第一个) > Headers
headers={
#User-Agent 浏览器标识头,爬虫必备,最好带上。
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
"Cookie":"", #cookie相当于临时登陆凭证,作用跟账号密码一样,有效期由网站决定,几天到几月不等。带cookies伪装表示已登陆状态。
"Referer":"https://www.baidu.com", #Referer表示来源地址,有些网站会检测跨域访问,不合法会拒绝。
#剩下其它的一些伪装如果能正常访问可以不添加,不能就加上吧
#"Upgrade-Insecure-Requests": "1", #比如这个属性是百度网址的,其它网址可能有其它属性值
}
r=requests.get(url,headers=headers) #正式get请求
if r.status_code !=200: #状态码判断返回是否成功,不成功则报错退出
print("获取url:%s失败!"%(url))
exit()
return r #直接返回r,为什么不直接返回r.text(文本),因为图片/视频格式是r.content(用二进制写入)
#=====================================解析区==========================================#
#xpath解析接口,输入:xpath格式字符串'//div/img[@id="s_lg_img_new"]'注意外面一层是单引号,返回值为list,元素为字符串
#我个人推荐xpath,轻巧强大好用,浏览器自带解析路径,不会写的直接无脑copy,右键元素 > Copy > CopyXpath,复制字符串传入参数即可
#xpath字符串通用写法://标签[@属性="属性值"]/下一级标签[@属性="属性值"]/text() 取出文本 /@src取出src地址
#例子://div[@class="text-content"]/a/@href #取出div下的第2个a的href属性值。
def getxpath(r,str):
html = etree.HTML(r.text)
reslist = html.xpath(str)
return reslist
#=====================================保存区==========================================#
#爬虫目的一般为获取文本/图片/视频等数据,一般要保存下来慢慢看
#文本写入txt,传入参数:txtpath路径,data数据
def writetxt(txtpath,data_str): #文本的名字和路径,也可以使用绝对路径,例如 "D:\\爬虫学习\\采集文本.txt"
with open(txtpath, "w") as f:
f.write(str(data_str))
#图片写入jpg/png,传入参数:imgpath路径,content二进制数据
def writeimg(imgpath,content): #图片的名字和路径
with open(imgpath, "wb") as f:
f.write(content)
#================以上三大块就是通用爬虫模板,下面是自己写的想实现的功能====================#
#获取百度首页"新闻"字样,并写入txt中
def get_news_txt():
#第一步:请求网址先获取html
url="https://www.baidu.com"
r=gethtml(url)
#第二步:解析路径,找到标题对应的xpath路径
title_xpath='//div[@id="s-top-left"]/a/text()' #注意外面一层是单引号'',a表示选中第一个a标签, text()取出文本
title_list=getxpath(r,title_xpath) #别忘记传入r页面源码哦
new_str=title_list
print(f"获取到的文本为:{new_str}")
#第三步:保存数据写入txt文件中
writetxt("./爬到的第一个文本.txt",str(new_str)) #文本只能写入字符串
print("恭喜你爬取了一个文本数据!快打开文件看看吧")
'''
#下面是扩展测试# 如果我想打印整个标题栏的所有文本
title_xpath='//div[@id="s-top-left"]/a/text()' #a没有选中具体值,返回所有匹配的值
title_list=getxpath(r,title_xpath) #别忘记传入r页面源码哦
print("#====都让开,小孩子才做选择,我全都要!====#")
title_str=""
for one in title_list:
print(one)
title_str+=str(one)+""
writetxt("./爬到的第一个文本.txt",str(title_str))
print("恭喜你写入了一个爬虫数据!快打开文件看看吧")
'''
#获取百度logo,并写入图片中
def get_baidu_logo():
#同理第一步先请求网址
url="https://www.baidu.com"
r=gethtml(url)
#第二步解析路径
logo_url_list=getxpath(r,'//img[@id="s_lg_img_new"]/@src') #这个img一定要找对哦,右键审查元素不一定全都准确,还有这次要取的属性为src链接,而不是text文本
logo_url=logo_url_list #如果只有一个值就取
print(f"获取到了logo图片地址文本:{logo_url},很明显没有https:这个开头,加个即可完成")
#处理字符串
logo_url="https:"+logo_url
#获取到了logo地址了,直接访问获取图片
r=gethtml(logo_url)
#写入图片
writeimg("./百度logo.png",r.content) #注意!注意!注意!图片是二进制格式写入,用r.content二进制数据,不要传入r.text文本
print("恭喜你写入了一张稀有图片(金色传说)!快打开图片看看吧")
#下面这个相当于C语言的main入口
if __name__ == '__main__':
#获取百度首页"新闻"字样,并写入txt中
get_news_txt()
#获取百度logo,并写入图片中
get_baidu_logo()
print("\n==============恭喜你完成简单的爬虫任务,顺利毕业啦!===============\n")
#print("快去爬取淘宝吧!不是 (狗头doge)")
https://static.52pojie.cn/static/image/hrline/4.gif
通用框架虽然简单,但修修改改还是可以爬不少网站的,而且保留大量注释给新手说明,基本都能看懂吧。
最快的学习方法就是直接上手撸码,而不是看什么视频学习,不懂再去搜索。
当然连一些html简单基础或者python基础语法都不懂的真小白,只推荐一处学习网站:
【中国大学mooc】:https://www.icourse163.org/
(搜“嵩天”,真正的大佬,启蒙的老师,对小白超友好,别去b站搜索什么营销号的盗版视频了,全损音质不说,废话是真的多)
#========================作者专用挖坑机=============================#
下一章节:post模式全解析,让爬虫发出网络的第一声啼鸣(嗷呜~)
=====下章更新时间:2021春节前后,这次应该不咕了,嗯应该吧
希望这篇文章对你有用,记得给个热心值呀,这样才有动力去更新呀~
看视频或者书籍的正确观:并不是说看了就会,视频和书籍是辅助工具,真正要学习起来的话就是对照着视频和书籍挨个挨个敲代码,多注释。然后开始有目的性的用学到的东西造轮子。感谢分享,这帖子对于新手挺友好的,爬虫基本上也就是这个框架了,后期要学的就是突破反爬虫机制 先收藏了 收藏了,谢谢大佬 已收藏评分,希望系列更新 感谢大佬收藏了 感谢分享,很有帮助! 很需要呀,谢谢大佬 感谢大佬分享,已经写得十分细致。 学习了,感谢大佬分享