鱼C论坛

 找回密码
 立即注册
查看: 1963|回复: 13

[已解决]【#$%$@???】我也不知道怎么回事的爬虫程序

[复制链接]
发表于 2018-2-22 09:32:41 | 显示全部楼层
你的get_url中的for语句如下
for each in soup:
        add=each.get('href')
        try:
            if add in adds or'/skhtmlnews/' not in add:
                temp=temp+1
                continue
            else:
                adds.append(add)
                title=each.get_text(strip=True)
                titles.append(title)
                print add
                print title
        except:
            continue
    print temp
由于你的网页中的标题的内容有30条,所以会输出add和title总共60个,然后输出======,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-22 13:19:32 | 显示全部楼层
脑子 发表于 2018-2-22 11:51
但它在我的for循环里只输出了一次?

你把截图发过来看一下,我看不懂你什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-23 16:51:44 | 显示全部楼层    本楼为最佳答案   
脑子 发表于 2018-2-23 11:41
整个程序只出现了一次,我发现不能进行temp大于20就break的操作,于是用print ‘======’插在中间看看,p ...

在你的geturl 函数加上global viewstate如下
def get_urls(html,page_num):
    global viewstate
也可以将viewstate换个名字(如:viewstate1),并给变量一个值
因为如果你的viewstate1没有赋值,第二次时,下面语句没有执行 ,就会直return viewstate1,就出出错
if page_num==1:
        soup_v=soup0.find('input',id='__VIEWSTATE')
        viewstate1=soup_v.get('value')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-23 19:20:40 | 显示全部楼层
脑子 发表于 2018-2-23 17:32
viewstate在原程序中是在主函数中定义了的,有初值,不会产生没有赋值的情况。

是不是有什么其他问题 ...

不是其他,就是这个问题
由于你在函数中的if条件语句中使用了viewstate,并且你没有声明是全局变量,所以python会认为你return viewstate使用的是if中的变量,当if语句没有执行时,viewstate没有赋值,你就return了一个没有赋值的变量,所以会出现异常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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