鱼C论坛

 找回密码
 立即注册
查看: 1529|回复: 6

[已解决]分页报错了。

[复制链接]
发表于 2020-10-22 18:44:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
from lxml import etree
import os
if not os.path.exists('./jianlimoban'):
    os.mkdir('./jianlimoban')
#获取url
url = 'http://sc.chinaz.com//jianli//free.html'
#UA伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}
#网站分页操作
for page in range(1,5):
    if page==1:
        new_nrl = 'http://sc.chinaz.com//jianli//free.html'
    else:
        new_nrl=format(url%page)
    #向网页发起请求
        response = requests.get(url=new_nrl,headers=headers)
        response.encoding ='utf-8'
        page_text = response.text
        #网页解析
        tree = etree.HTML(page_text)
        div_list = tree.xpath('//div[@id="main"]/div/div')
        #for循环倒出每一个的详情连接
        for div in div_list:
            detail_url = div.xpath('./a/@href')[0]
            #print(detail_url)
            detail_name = div.xpath('./a/img/@alt')[0]+'.rar'
            #print(detail_name)
            response = requests.get(url=detail_url,headers=headers)
            response.encoding='utf-8'
            detail_data = response.text
            #实例化datail_data
            tree2 = etree.HTML(detail_data)
            downloda_list = tree2.xpath('//div[@class="down_wrap"]/div[2]/ul/li[6]/a/@href')[0]
            downloda_data = requests.get(url=downloda_list,headers=headers)
            downloda_data.encoding = 'utf-8'
            downloda_data = downloda_data.content
            filepath ='./jianlimoban'+detail_name
            with open(filepath,'wb') as fp:
                fp.write(downloda_data)
                print(detail_name,'爬取成功!!!')
最佳答案
2020-10-22 18:56:49
孝白歌 发表于 2020-10-22 18:55
else:
            # 拼接从第二页开始往后的url
            new_url = format(url % page

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。

实例
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'

>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'

>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'
QQ截图20201022184343.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-22 18:50:07 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-10-22 18:51 编辑
  1. new_nrl='http://sc.chinaz.com//jianli//free_{}.html'.format(page)
复制代码


你是咋构造url的?

  1. filepath ='./jianlimoban/'+detail_name
复制代码

还有这里修改下,否则没保存进文件夹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 18:54:34 | 显示全部楼层
这句:new_nrl = format(url % page)
url带入后,里面没有可格式化的字段,你需要这样:
  1. for page in range(1, 5):
  2.     if page == 1:
  3.         new_nrl = 'http://sc.chinaz.com//jianli//free.html'
  4.     else:
  5.         new_nrl = f'http://sc.chinaz.com//jianli//free_{page}.html'
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-22 18:55:30 | 显示全部楼层

else:
            # 拼接从第二页开始往后的url
            new_url = format(url % page
这样拼接的方式不行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 18:56:49 | 显示全部楼层    本楼为最佳答案   
孝白歌 发表于 2020-10-22 18:55
else:
            # 拼接从第二页开始往后的url
            new_url = format(url % page

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。

实例
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'

>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'

>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-22 19:00:12 | 显示全部楼层
疾风怪盗 发表于 2020-10-22 18:56
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语 ...

这样啊,好的。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 19:40:40 | 显示全部楼层
孝白歌 发表于 2020-10-22 19:00
这样啊,好的。谢谢了

如果问题解决了,请设个最佳,把求助帖子关了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-6 01:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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