鱼C论坛

 找回密码
 立即注册
查看: 4083|回复: 14

[已解决]Python爬虫问题求解

[复制链接]
发表于 2016-7-8 20:22:35 | 显示全部楼层 |阅读模式
50鱼币
看了小甲鱼《一只爬虫的自我修养:OOXX》,无论是用自己写的代码还是小甲鱼的源代码都无法成功获取图片,错误代码:HTTP Error 503: Service Temporarily Unavailable,用小甲鱼的代码则是出现[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。去掉IP代理也是一样,求解原因

代码如下:
import urllib.request
import os
import random

def open_url(url):
    print(url)
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36')
    proxies = ['1.182.183.2:8888', '36.7.172.18:82','42.248.207.88:8888']
    proxy = random.choice(proxies)

    proxy_support = urllib.request.ProxyHandler({'http':proxy})
    opener = urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)
    response = urllib.request.urlopen(url)
    html = response.read()
    print(html)
    return html

def get_page(url):

    html = open_url(url).decode('utf-8')
    a = html.find('current-comment-page')+23
    b = html.find(']',a)
    print(html[a:b])
    return html[a:b]

def find_imgs(url):
    html = open_url(url).decode('utf-8')
    img_addrs=[]
    a = html.find('a href=')
    while a != -1:
        b = html.find('\" target',a)
        if b != -1:
            img_addrs.append(html[a+8:b])
        else:
            b = a + 8
        a = html.find('a href=',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 = open_url(each)
            print(each)
            f.write(img)
        

def download_mm(folder='ooxx',pages=10):
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    page_num = int(get_page(url))
   
   
    for i in range(pages):
        page_num -= i
        page_url = url + 'page-' + str(page_num) + '#comments'
        img_addrs = find_imgs(page_url)

      
        save_imgs(folder,img_addrs)

if __name__=='__main__':
    download_mm()
最佳答案
2016-7-8 20:22:36
时间过了这么久了,网页的地址,图片的地址可能都有变化,还有就是之前看一个帖子说煎蛋网加入了反爬虫机制,所以直接用原来的方法爬,肯定会出问题的。

以下是解决方案,
可以添加一些代码将程序伪装成人为操作
比如加入浏览器的一些代码(小甲鱼老师在55课隐藏有讲)
  1.     data['type'] = 'AUTO'
  2.     data['i'] = content
  3.     data['doctype'] = 'json'
  4.     data['xmlVersion'] = '1.8'
  5.     data['keyfrom'] = 'fanyi.web'
  6.     data['ue'] = 'UTF-8'
  7.     data['action'] = 'FY_BY_CLICKBUTTON'
  8.     data['typoResult'] = 'true'
复制代码


或者换一个网站,比如【www.chunmm.com】。。。仅供参考,试试就行啊,记住就测试一下代码能不能用就行啊。。。
刚写的代码,测试可用【仅供参考】
  1. import urllib.request as u
  2. import os

  3. def url_open(url):
  4.     req = u.Request(url)
  5.     req.add_header('User-Agent' , 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')
  6.     response = u.urlopen(url)
  7.     html = response.read()
  8.     return html

  9. def find_imgs(url):
  10.     html = url_open(url).decode('utf-8')
  11.     img_addrs = []

  12.     a = html.find('img id="maxImg1" src=')
  13.     b = html.find('.jpg', a , a+255)
  14.     if b != 1:
  15.         img_addrs.append(html[a+22:b+4])

  16.     print(img_addrs[0])
  17.     return img_addrs[0]
  18.    

  19. def save_imgs(folder, img_address):
  20.     filename = img_address.split('/')[-1]
  21.     with open(filename, 'wb') as f:
  22.         img = url_open(img_address)
  23.         f.write(img)

  24. def download_mm(folder = 'jiandan', pages = 10):
  25.     # 生成文件夹
  26.     os.mkdir(folder)
  27.     # 改变工作目录
  28.     os.chdir(folder)

  29.     url = 'http://www.symmz.com/xinggan/3384-'
  30.     #page_num = int(get_page(url))
  31.    
  32.     for i in range(1,pages):
  33.         #page_num -= i
  34.         page_url = url + str(i) + '.html'
  35.         print(page_url)
  36.         img_address = find_imgs(page_url)
  37.         save_imgs(folder, img_address)

  38. if __name__ == '__main__':
  39.     download_mm()
复制代码

最佳答案

查看完整内容

时间过了这么久了,网页的地址,图片的地址可能都有变化,还有就是之前看一个帖子说煎蛋网加入了反爬虫机制,所以直接用原来的方法爬,肯定会出问题的。 以下是解决方案, 可以添加一些代码将程序伪装成人为操作 比如加入浏览器的一些代码(小甲鱼老师在55课隐藏有讲) 或者换一个网站,比如【www.chunmm.com】。。。仅供参考,试试就行啊,记住就测试一下代码能不能用就行啊。。。 刚写的代码,测试可用【仅供参考】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-8 20:22:36 | 显示全部楼层    本楼为最佳答案   
时间过了这么久了,网页的地址,图片的地址可能都有变化,还有就是之前看一个帖子说煎蛋网加入了反爬虫机制,所以直接用原来的方法爬,肯定会出问题的。

以下是解决方案,
可以添加一些代码将程序伪装成人为操作
比如加入浏览器的一些代码(小甲鱼老师在55课隐藏有讲)
  1.     data['type'] = 'AUTO'
  2.     data['i'] = content
  3.     data['doctype'] = 'json'
  4.     data['xmlVersion'] = '1.8'
  5.     data['keyfrom'] = 'fanyi.web'
  6.     data['ue'] = 'UTF-8'
  7.     data['action'] = 'FY_BY_CLICKBUTTON'
  8.     data['typoResult'] = 'true'
复制代码


或者换一个网站,比如【www.chunmm.com】。。。仅供参考,试试就行啊,记住就测试一下代码能不能用就行啊。。。
刚写的代码,测试可用【仅供参考】
  1. import urllib.request as u
  2. import os

  3. def url_open(url):
  4.     req = u.Request(url)
  5.     req.add_header('User-Agent' , 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')
  6.     response = u.urlopen(url)
  7.     html = response.read()
  8.     return html

  9. def find_imgs(url):
  10.     html = url_open(url).decode('utf-8')
  11.     img_addrs = []

  12.     a = html.find('img id="maxImg1" src=')
  13.     b = html.find('.jpg', a , a+255)
  14.     if b != 1:
  15.         img_addrs.append(html[a+22:b+4])

  16.     print(img_addrs[0])
  17.     return img_addrs[0]
  18.    

  19. def save_imgs(folder, img_address):
  20.     filename = img_address.split('/')[-1]
  21.     with open(filename, 'wb') as f:
  22.         img = url_open(img_address)
  23.         f.write(img)

  24. def download_mm(folder = 'jiandan', pages = 10):
  25.     # 生成文件夹
  26.     os.mkdir(folder)
  27.     # 改变工作目录
  28.     os.chdir(folder)

  29.     url = 'http://www.symmz.com/xinggan/3384-'
  30.     #page_num = int(get_page(url))
  31.    
  32.     for i in range(1,pages):
  33.         #page_num -= i
  34.         page_url = url + str(i) + '.html'
  35.         print(page_url)
  36.         img_address = find_imgs(page_url)
  37.         save_imgs(folder, img_address)

  38. if __name__ == '__main__':
  39.     download_mm()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-8 20:56:40 | 显示全部楼层
应该很好解答吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-8 21:01:32 | 显示全部楼层
ooxx 是2014年的教程了,jiandan 改了mm图的访问机制,加了个301跳转,
所以 你的 get_page(url) 没有返回内容,自然出错啦~~

好吧,把鱼币给我吧,已经向你解释原因了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-9 10:34:06 | 显示全部楼层
SixPy 发表于 2016-7-8 21:01
ooxx 是2014年的教程了,jiandan 改了mm图的访问机制,加了个301跳转,
所以 你的 get_page(url) 没有返回 ...

谢谢。。。同样论坛还有个帖子 爬jandan 可以爬下来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-10 14:18:42 | 显示全部楼层
shuofxz 发表于 2016-7-9 10:21
时间过了这么久了,网页的地址,图片的地址可能都有变化,还有就是之前看一个帖子说煎蛋网加入了反爬虫机制 ...

你说的就是加Header的方式,我用了req.add_header和代理,依然没用,可见问题不在这里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-10 14:19:13 | 显示全部楼层
SixPy 发表于 2016-7-8 21:01
ooxx 是2014年的教程了,jiandan 改了mm图的访问机制,加了个301跳转,
所以 你的 get_page(url) 没有返回 ...

那么如何修改呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-15 23:27:12 | 显示全部楼层
那个大神能改下 煎蛋网的   爬虫 或者其他网的爬虫 代码让我看看 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-15 23:31:50 | 显示全部楼层
追寻灯火阑珊 发表于 2016-7-15 23:27
那个大神能改下 煎蛋网的   爬虫 或者其他网的爬虫 代码让我看看 啊

4楼有其他网站的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-15 23:31:53 | 显示全部楼层
追寻灯火阑珊 发表于 2016-7-15 23:27
那个大神能改下 煎蛋网的   爬虫 或者其他网的爬虫 代码让我看看 啊

4楼有其他网站的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-15 23:32:38 | 显示全部楼层
shuofxz 发表于 2016-7-9 10:21
时间过了这么久了,网页的地址,图片的地址可能都有变化,还有就是之前看一个帖子说煎蛋网加入了反爬虫机制 ...

老师   爬虫两种那后 出现
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/download5.py", line 47, in <module>
    download_mm()
  File "C:/Users/Administrator/Desktop/download5.py", line 44, in download_mm
    save_imgs(folder, img_address)
  File "C:/Users/Administrator/Desktop/download5.py", line 26, in save_imgs
    with open(filename, 'wb') as f:
FileNotFoundError: [Errno 2] No such file or directory: ''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-15 23:54:04 | 显示全部楼层
追寻灯火阑珊 发表于 2016-7-15 23:32
老师   爬虫两种那后 出现
Traceback (most recent call last):
  File "C:/Users/Administrator/Deskt ...

我刚才看了一下,是有一点问题,在下载完成后少了关闭的功能
所以全部下载后,会报那个错误
你可以自己研究一下,该如何更改程序,让其能正常结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-16 01:48:40 | 显示全部楼层
shuofxz 发表于 2016-7-15 23:54
我刚才看了一下,是有一点问题,在下载完成后少了关闭的功能
所以全部下载后,会报那个错误
你可以自己 ...

我在想另外一个是怎么爬下来的
用什么方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-16 01:53:02 | 显示全部楼层
shuofxz 发表于 2016-7-15 23:54
我刚才看了一下,是有一点问题,在下载完成后少了关闭的功能
所以全部下载后,会报那个错误
你可以自己 ...

地址如下
http://bbs.fishc.com/thread-58406-1-2.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-14 18:37:38 | 显示全部楼层
煎蛋网加了反爬虫机制。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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