吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11784|回复: 69
收起左侧

[Python 转载] python爬虫入门通用框架【小白向】

     关闭 [复制链接]
riwfhiu 发表于 2021-1-6 23:29
本帖最后由 riwfhiu 于 2021-1-6 23:49 编辑

为了回应那些私信我怎么学习爬虫看什么视频,想爬某某网站图片怎么改代码,怎么获取页面任意元素的属性值。。。
鸽了这么久,它终于来了,requests库的通用爬虫框架!本文纯小白入门向,已入门的或者大佬轻点喷,我自己也是小白[doge]


爬虫三步走战略:
一.请求网址
二.解析定位
三.保存数据



不讲虚道理,直接上两个实例:
1.获取百度页面标题“新闻”文本,并写入txt
2.获取百度logo图片,并写入图片png







1.伪装访问请求头:按F12 >> Network >> 目标网址 >> 找到请求头

F12获取请求头

F12获取请求头





2.定位元素(文本):右键菜单 >> 审查元素

新闻文本元素

新闻文本元素




3.定位元素(图片):同理右键菜单 >> 审查元素

logo图片元素

logo图片元素






[Python] 纯文本查看 复制代码
'''
需要两个库,打开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[id="lg"]/img[@id="s_lg_img_new"]'  注意外面一层是单引号,返回值为list,元素为字符串
#我个人推荐xpath,轻巧强大好用,浏览器自带解析路径,不会写的直接无脑copy,右键元素 > Copy > CopyXpath,复制字符串传入参数即可
#xpath字符串通用写法://标签[@属性="属性值"]/下一级标签[@属性="属性值"]/text() 取出文本 /@src取出src地址
#例子://div[@class="text-content"]/a[2]/@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[1]/text()'       #注意外面一层是单引号'',a[1]表示选中第一个a标签, text()取出文本
    title_list=getxpath(r,title_xpath)              #别忘记传入r页面源码哦
    new_str=title_list[0]
    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[0]       #如果只有一个值就取[0]
    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)")







通用框架虽然简单,但修修改改还是可以爬不少网站的,而且保留大量注释给新手说明,基本都能看懂吧。
最快的学习方法就是直接上手撸码,而不是看什么视频学习,不懂再去搜索。
当然连一些html简单基础或者python基础语法都不懂的真小白,只推荐一处学习网站:

【中国大学mooc】:https://www.icourse163.org/
(搜“嵩天”,真正的大佬,启蒙的老师,对小白超友好,别去b站搜索什么营销号的盗版视频了,全损音质不说,废话是真的多)


#========================作者专用挖坑机=============================#
下一章节:post模式全解析,让爬虫发出网络的第一声啼鸣(嗷呜~)


=====下章更新时间:2021春节前后,这次应该不咕了,嗯应该吧


希望这篇文章对你有用,记得给个热心值呀,这样才有动力去更新呀~


免费评分

参与人数 53吾爱币 +49 热心值 +50 收起 理由
Sheng——zac + 1 + 1 我很赞同!
现实太假 + 1 + 1 谢谢@Thanks!
suyaming + 1 + 1 谢谢@Thanks!
鱼丸 + 1 谢谢@Thanks!
TSF + 1 + 1 用心讨论,共获提升!
ebaolzh + 1 + 1 我很赞同!
嘟鲁鲁 + 1 + 1 用心讨论,共获提升!
老友牛杂 + 1 + 1 用心讨论,共获提升!
hihigh + 2 + 1 谢谢@Thanks!
xhchjuan + 1 + 1 谢谢@Thanks!
凉意人 + 1 + 1 热心回复!
念所不及 + 1 + 1 我很赞同!
Eilliem + 1 + 1 楼主推荐嵩天老师,我给你点赞!嵩老师的教材真的是非常棒~
z2740 + 1 + 1 谢谢@Thanks!
eqqydl + 1 热心回复!
耿梦莹123 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
heymon0n + 1 + 1 谢谢@Thanks!
l2430478 + 3 + 1 有S以来,最良心的,批示最详细的砖家!
jvhuai + 1 我很赞同!
喵鹿 + 1 + 1 谢谢@Thanks!
过往温柔的你 + 1 + 1 用心讨论,共获提升!
开口笑笑 + 1 + 1 谢谢@Thanks!
LloLl + 1 + 1 谢谢@Thanks!
莫凉生 + 1 我很赞同!
Eric-zhou + 1 + 1 谢谢@Thanks!
dkmg + 1 用心讨论,共获提升!
HopesOfSummer + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
2longlong + 1 + 1 就只喜欢这种简单粗暴,不废话就是干
Who123 + 1 热心回复!
dissadmi + 1 + 1 谢谢@Thanks!
liuy702 + 1 + 1 谢谢@Thanks!
w547890 + 1 + 1 谢谢@Thanks!
光速 + 1 + 1 用心讨论,共获提升!
paguco + 1 + 1 我很赞同!
吾要开始学习ing + 1 + 1 鼓励转贴优秀软件安全工具和文档!
亲亲水母茶 + 1 谢谢@Thanks!
anywell + 1 + 1 谢谢@Thanks!
小涛哥 + 1 + 1 用心讨论,共获提升!
荒草2378 + 1 + 1 谢谢@Thanks!
明明欣雨 + 1 + 1 我很赞同!
ofo + 1 用心讨论,共获提升!
redscop + 1 + 1 我很赞同!正需要,太及时。
吾爱萝莉 + 1 + 1 热心回复!
mq0192 + 1 + 1 谢谢@Thanks!
lfm333 + 1 谢谢@Thanks!
头狼 + 1 + 1 用心讨论,共获提升!
axwa + 1 用心讨论,共获提升!
pqkane + 1 + 1 谢谢@Thanks!
郭老师 + 1 + 1 谢谢@Thanks!
知味8848 + 1 + 1 热心回复!
hjf850525 + 1 + 1 超级小白表示先赞
CTZ + 1 + 1 准小白一个,感觉超有用,谢谢
十一大魔王i + 1 + 1 就喜欢这种通俗易懂的

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

慵懒丶L先森 发表于 2021-1-7 02:09
看视频或者书籍的正确观:并不是说看了就会,视频和书籍是辅助工具,真正要学习起来的话就是对照着视频和书籍挨个挨个敲代码,多注释。然后开始有目的性的用学到的东西造轮子。感谢分享,这帖子对于新手挺友好的,爬虫基本上也就是这个框架了,后期要学的就是突破反爬虫机制
十一大魔王i 发表于 2021-1-6 23:39
飓风861 发表于 2021-1-7 00:05
知味8848 发表于 2021-1-7 00:09
已收藏评分,希望系列更新
lcl0219 发表于 2021-1-7 00:12
感谢大佬  收藏了
a3322a 发表于 2021-1-7 07:03
感谢分享,很有帮助!
zz1181 发表于 2021-1-7 07:23
很需要呀,谢谢大佬
nullable 发表于 2021-1-7 08:08
感谢大佬分享,已经写得十分细致。
lfm333 发表于 2021-1-7 08:22
学习了,感谢大佬分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表