【笔记】0基础python学爬虫(未完)
(一)用requests发送get请求
安装好pycharm(跳过)
在本地控制台输入pip install requests 安装requests模块
with防止资源浪费 不论f文件有没有执行成功最后都会关闭
请求获取url
resp = requests.get(url)
resp.text获取源代码
as f:
表示将打开的文件对象赋值给变量 f
。通过 f
,你可以操作这个文件,比如读写文件内容
(二)发送post请求
你编出来的数据名称 = {“kw":要爬虫的关键字}
kw表示查询的关键词(keyword)
通过 数据={“kw”:}可以访问字典中键 kw
对应的值(即用户输入的单词)
input()
是一个内置的 Python 函数,用来获取用户输入。
在执行时,input("请输入你想查询的单词")
会在控制台向用户显示提示语句 **"请输入你想查询的单词"**,然后等待用户在控制台输入文本。
用户输入的文本会作为字符串返回,并存储在字典 数据
的 kw
键中。
requests.post(url,data = 你编出来的数据名称)
(三)正则表达式
.*取对应的头和尾的最远距离范围
.*?取对应头和尾的最近距离
图中红色阴影部分为 对应头和尾
(四)re模块
匹配的正则表达式加载器 re.compile(r' ') /r(“ ”)也可以
(五)正则+re的实战
.*?匹配到代码中正则表达式的头和尾(最近) 命名则提取 不命名则过滤
输出时用上面两个哪个都可以
(六)xpath = xml html
xpath导入方式:
加载器:
重点:
导入语句 from lxml import etree
f对象写入html源代码
etree.HTML()再将加载好的html代码解析成一个dom树
语法:
自己抓了个网址代码写入xpath_test.html 活学活用
text()是提取标签中间的文本
* 是任意符
@ 可以提取标签中的属性的文本
// 是随机位置
标签[属性='属性名'] 可以提取固定条件的文本
写循环输出时
把要输出内容的共同部分写成et.xpath(”“)第一部分
共同部分之下要提取的分类进行提取 如何输出
./ 表示共同部分的路径
(七)re+xpath实战
7.1xpath爬取该页面上各个子页面的href
url = "https://desk.zol.com.cn/dongwu/"
head ={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}
domain = "https://desk.zol.com.cn"
resp = requests.get(url,headers=head)
resp.encoding = "gbk"
et = etree.HTML(resp.text)
result = et.xpath("//ul[@class='pic-list2 clearfix']/li[@class='photo-list-padding']/a[@class='pic']/@href")
for item in result:
url = domain + item
print(url)
拼接可得到完整的访问链接url
7.2re爬取子某个页面上的图片的src
根据网页规则来 自己查看页面代码
# 获取详细页面的src(处理好分辨率版本)
url = "https://desk.zol.com.cn/bizhi/9694_117200_2.html"
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
"Referer": "https://desk.zol.com.cn/dongwu/",
"Cookie": "ip_ck=7sKA7vv/j7QuOTUxOTE4LjE3MjI0NDI1NzY%3D; questionnaire_close_today=1724371201; questionnaire_close_total=1; lv=1724709196; vn=7; Adshow=4; questionnaire_pv=1724630413; cto_bundle=bSGTdl8lMkJtMEE5TVU3OWF5VUg3N0RWa2dNcXRodHZLblQ0b0hJN1hZSGZVcVBKMENkRHQyWVUwcVNGN3hvNlpmS09iMTA1djdnRnJIeVc5NHNnSXAxb0lVR0FTam96RjlXbmZYdDExYzl2Z1Z4clNPdUNpYjBtTk4yYVhCRURxeHklMkZGRTF6ZllSMCUyRk5uOFVyZ2JhRzZSQUR4SlElM0QlM0Q"
}
resp = requests.get(url,headers=head)
obj = re.compile(r"var deskPicArr.*?=(?P<deskPicArr>.*?);", re.S)
result = obj.search(resp.text)
deskPicStr = result.group("deskPicArr")
deskPic = json.loads(deskPicStr)
for item in deskPic['list']:
oriSize = item.get("oriSize") # 取oriSize尺寸
imgsrc = item.get("imgsrc") # 获取图片下载路径
imgsrc = imgsrc.replace("##SIZE##", oriSize) # 取oriSize放进##SIZE##里
print(f"下载链接:", imgsrc)
遇到网页防爬403 未解决