前言:
先说结果,打个预防针,本文主要是方法:
因为网站需要注册才能下载东西,因为不想注册,所以没有下载。(如果要下载,请先登录,然后将cookies加入请求头里)
关于如何跳过登录爬取,我也知道一般是cookies方法,但是这个前提是你登录过才会有转么的cookies(好像也有办法不登录也能爬到,我还没有那么厉害的技术,后续去研究下)
代码步骤
具体的代码步骤和释义都卸载代码里了,不想一步一步截图了
建议每个步骤都去print一下,如果不对劲,重新梳理逻辑,就能找到问题拉
#1.导入模块(第2步放在最下面了)
import requests
from lxml import etree
import os #这里是生成存储文件夹
if not os.path.exists('D:/PPT'):
os.mkdir("D:/PPT")
#3.定义函数(开始爬取下载)
def create_request(page):
#3.1 写入url,请求头,from data(就是页码变化)
url='https://www.51miz.com/so-ppt/85330'
headers={
'User-Agent':'这里写自己电脑的UA'
#如果你登录过,要下载,cookies写在这里
}
data={
'page_name':page
}
# 3.2生成每一页的链接
urls=url+"/p_"+str(page)+'/'
request = requests.get ( url=urls, headers=headers, data=data )
#3.3 获取每页的网页内容
content=request.text
#3.4解析每一页内容
x_page=etree.HTML(content)
#3.5xpath解析到每个ppt的链接(可以跳转到详细)和ppt名字
ppt_page_link=x_page.xpath('//div[@class="swe-div"]/a/@href')
ppt_name = x_page.xpath ( '//div[@class="swe-div"]/a/span//@title')
#3.6 用字典组对然后遍历 使名字和链接一一对应
dic=dict(zip(ppt_name,ppt_page_link))
for ppt_name,ppt_page_link in dic.items(): #注意items不要漏掉
# 3.6.1 获取每个ppt的详情页面的信息
page_content=requests.get(url=ppt_page_link,headers=headers).text
# 3.6.2 解析ppt详情页的信息
x_load_page=etree.xpath(page_content)
# 3.6.3 获取下载链接(这个链接就是直接跳转下载,如果下载套娃,那就还要再对下载也买你解析,然后获取最后的下载包)
ppt_load_link=x_load_page.xpath('//a[@class="iblock center top-scroll-download"]/@href')
# 3.6.4 建立本地存储路径
file_path="D:/PPT/"+ppt_name
# 3.6.5 下载文件
with open(file_path,"wb") as fp:
fp.write(ppt_load_link)
#2.封装函数(也可以不用,直接将ab写步骤1 下面
if __name__ == '__main__':a
end_page=int(input("请输入页码"))#a
for page in range(1,end_page+1):#b
create_request(page)
问题:
ValueError: too many values to unpack (expected 2)
这个问题的原因是,字典应用没有加items.
for ppt_name,ppt_page_link in dic.items():