鱼C论坛

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

爬虫错误

[复制链接]
发表于 2018-9-29 00:10:39 | 显示全部楼层 |阅读模式

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

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

x
import urllib.request
import os

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36') #加上header
    response = urllib.request.urlopen(url)
    html = response.read() #返回文件文本
    return html
def get_page(url):
        html = url_open(url).decode('utf-8')
        a = html.find('color="#ff0000"')+1  #找出网页代码的页数
        b = html.find('<',a)

        return html[a:b]


def  find_img(url):
        html = url_open(url).decode('utf-8')
        img_addrs = []
        a = html.find('img src=')
        while a !=-1:
                b = html.find('.jpg',a,a + 255)
                if b!=-1 :
                    img_addrs.append(html[a+9:b+4])
                else:
                    b = a+9
                a = html.find('img src=',b)
        return img_addrs





def  save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]
        with open(filename,'wb') as f:
            img = url_open(each)
            f.write(img)

def dowmload(folder = 'picture',pages = 10):                    #定义函数下载照片,文件名和page数
    os.mkdir(folder)#创建文件
    os.chdir(folder)#更改目录

    url = "http://games.tgbus.com/default.aspx?page"#将地址传到URL里面
    try:
        int('')
    except ValueError:
        pass
    page_num = int(get_page(url))   #调用get_page函数,将结果存储在page_num里面

    for i in range(pages):
            page_num -=i
            page_url = url +str(page_num)
            img_addrs = find_img(page_url)
            save_imgs(folder,img_addrs)


if __name__ =='__main__':
    dowmload()











想去爬games.tgbus.com/default.aspx?page里面的图片


按照小甲鱼的代码去写的,但是不知道为什么就是在解析后的文件里面找不到页数的代码color="#ff0000。一开始跟小甲鱼一样在煎蛋网上爬,但是虽然找的了页数但是找不了.jpg,所以一直出错。

希望有好心人帮我解决这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-29 00:56:34 | 显示全部楼层
看了半天实在不知道你想爬网页上面的什么图片
只能帮你把 找页数的那个函数改好了
后面的找图片的那个程序不知道要爬什么,没改
#! /usr/bin/env python 
# -*- coding:utf-8 -*-
import urllib.request
import os,re

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36') #加上header
    response = urllib.request.urlopen(url)
    html = response.read() #返回文件文本
    return html

def get_page(url):
        html = url_open(url).decode('utf-8')
        num = re.findall(r"<dd><a  href='/default.aspx\?page=2&elite=0&keyword=&type=0&tag=0&nid=-1'>(.*?)</a>",html)
        return num[0]


def  find_img(url):
        html = url_open(url).decode('utf-8')
        img_addrs = []
        a = html.find('img src=')
        while a !=-1:
                b = html.find('.jpg',a,a + 255)
                if b!=-1 :
                    img_addrs.append(html[a+9:b+4])
                else:
                    b = a+9
                a = html.find('img src=',b)
        return img_addrs





def  save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]
        with open(filename,'wb') as f:
            img = url_open(each)
            f.write(img)

def dowmload(folder = 'picture',pages = 10):                    #定义函数下载照片,文件名和page数

    os.chdir(folder)#更改目录

    url = "http://games.tgbus.com/default.aspx?page"#将地址传到URL里面
    try:
        int('')
    except ValueError:
        pass

    page_num = int(get_page(url))   #调用get_page函数,将结果存储在page_num里面

    for i in range(pages):
            page_num -= i
            page_url = url +'='+str(page_num)
            img_addrs = find_img(page_url)
            save_imgs(folder,img_addrs)


if __name__ =='__main__':
    dowmload()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-29 13:40:39 | 显示全部楼层
RIXO 发表于 2018-9-29 00:56
看了半天实在不知道你想爬网页上面的什么图片
只能帮你把 找页数的那个函数改好了
后面的找图片的那个程 ...


我想爬的是游戏封面的图片,谢谢你帮我修改程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-29 13:47:56 | 显示全部楼层
ppooqq 发表于 2018-9-29 13:40
我想爬的是游戏封面的图片,谢谢你帮我修改程序

那么你的爬游戏封面url 的那个程序就是错的,自己再看一下网页源码改改把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-29 15:52:07 | 显示全部楼层
RIXO 发表于 2018-9-29 13:47
那么你的爬游戏封面url 的那个程序就是错的,自己再看一下网页源码改改把

请问一下为什么会错呢?小甲鱼视频上这样做已经爬成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-29 17:51:27 From FishC Mobile | 显示全部楼层
那个是因为字符串方法的可靠性太差,就比如你说要找一个href 前面可能就只有个img  后面有个class,这样的东西在网页里面太多了,指不定运行到哪里就出错了,尤其是有些地方,数值和中文分开放的,全是一堆的class,更是找不到图片,然后有的网页里面链接更是省略的,你都不一定能找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-29 22:22:43 | 显示全部楼层
本帖最后由 ppooqq 于 2018-9-30 00:10 编辑

import urllib.request
import os
import re

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36') #加上header
    response = urllib.request.urlopen(url)
    html = response.read() #返回文件文本
    return html
def get_page(url):
        html = url_open(url).decode('utf-8')
        num = re.findall(r"<dd><a  href='/default.aspx\?page=2&elite=0&keyword=&type=0&tag=0&nid=-1'>(.*?)</a>", html)
        return num[0]



def  find_img(url):
        html = url_open(url).decode('utf-8')
        imglist = []
        p = r'<a href="/\d{5}/" target="_blank"><img src="([^"]+\.jpg)"'
        imglist = re.findall(p,html)



        return imglist   #返回图片





def  save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]  #获得图片名字
        with open(filename,'wb') as f: #写入文件
            img = url_open(each)
            f.write(img)

def dowmload(folder = 'picture',pages = 1):                    #定义函数下载照片,文件名和page数
    os.mkdir(folder)#创建文件
    os.chdir(folder)#更改目录

    url = "http://games.tgbus.com/default.aspx?page"#将地址传到URL里面
    try:
        int('')
    except ValueError:
        pass
    page_num = int(get_page(url))   #调用get_page函数,将结果存储在page_num里面

    for i in range(pages):      #想要打印的页数
            page_num -=i         #每打印一次减一页
            page_url = url + '=' +str(page_num)  #将要打印的页码加在url上赋给page_url
            img_addrs = find_img(page_url) #调用find函数找出那一页的所有图片并赋给img_addrs
            save_imgs(folder,img_addrs) #调用函数save将图片保存在文件夹里面


if __name__ =='__main__':
    dowmload()




请问我这样改了还是找不到图片的地址,如果单纯只是找'<img src =' 的话可以找到图片地址但是会出现一堆没有地址的line5,导致程序失败,但是<img src = 的前面没有什么特别的特征,然后我就加上上一行的代码,这回啥也找不出来了。请问一下这种情况该怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 10:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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