鱼C论坛

 找回密码
 立即注册
查看: 1825|回复: 2

用python爬图片时候遇到的一些问题(附代码可测试)

[复制链接]
发表于 2019-9-28 15:28:38 | 显示全部楼层 |阅读模式

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

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

x
我是一个刚刚接触python一个月不到的菜鸟,在B站看小甲鱼的视频,学到了很多,但是老是会遇到一些问题,怎么也想不明白,需要人点透一下,所以来论坛发帖求助,希望大家多多指教,一起进步。

前些天写了一个爬图片的爬虫,但是遇见2个问题,想了很久也想不明白。
1. 图片基本上能抓,但是总是会混入很多“加载中”的灰色图片,在反馈的信息中又得知是已读取出来的图片地址,浏览器访问地址可以正常打开和访问,为什么python下载之后却变成了加载中的小灰图。
搜索了一些资料,表示这关系到JS动态,需要考虑到Jason的相关情况,但是我就卡在这个点上,不明白应该怎么去处理。
因为我的理解:访问的Status Code: 200,这不是代表网速很好访问很快吗?为什么python访问却还是加载不出来呢?还需要用到js?而且一些图的大小只有几十KB,但是依然抓到的是加载图,其他有几百KB的却能够正常抓取。

2.我的正则表达式是http\S.*jpg——意思是下要http开头jpg结尾,中间可以是任意字符但是不要空格的url地址,但是图片抓到109张的时候,总是会抓到一些中间带空格的,然后程序就会报错,我不太明白这里是为什么。

希望路过的大神们帮我解答一下

  1. import urllib.request   #引入网站请求模块 request
  2. import os               #引入文件管理模块
  3. import random
  4. import re

  5. houzhui = random.randint(10000,100000)
  6. wenjianjia = '爬虫'+str(houzhui)
  7. print('新建了一个文件夹,名字是:'+wenjianjia)
  8. def download_mm(folder = wenjianjia):
  9.         os.mkdir(folder)  #创建文件夹
  10.         os.chdir(folder)

  11. if __name__== '__main__':
  12.     download_mm()

  13. def url_open(url):      #自定义一个方法url_open()
  14.     req = urllib.request.Request(url)       #方法为请求一个url链接将他赋值给rep
  15.     req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36")
  16.                         #给rep加上一个浏览器header伪装成人为访问
  17.     response=urllib.request.urlopen(url)
  18.                         #将这个网站基本页面抓取
  19.     html=response.read()
  20.                         #从文件指针所在的位置,读到文件结尾
  21.     print('================')          #打印出网址
  22.     print('读取到的网址是:'+url)
  23.     print('================')
  24.     return html


  25.    
  26. def find_imgs(url):     #定义了一个方法
  27.     html=url_open(url).decode("utf-8")    # 将网页打开变成utf-8编码并赋值给html
  28.     img_addrs=[]        #定义img_addrs是一个列表
  29.     text=str(html)
  30.     m=re.findall("http\S.*jpg",text)
  31.     img_addrs=m
  32.     return img_addrs

  33. print('请输入你要爬图的网页')
  34. temp=input()
  35. if temp=="":
  36.     temp='http://www.budejie.com/'
  37. url=str(temp)

  38. img_addrs=find_imgs(url)
  39. total = len(img_addrs)

  40. print('当前网址是:'+url)
  41. print('当前图片总数一共是: '+str(total)+' 张')
  42. print(img_addrs)
  43. print('===========')
  44. print('  分割线 ')
  45. print('===========')

  46. num1 = 0
  47. for x in img_addrs:
  48.     page_url = str(x)  #得到要爬取的页面的链接
  49.     print('获得的图片网址是:'+page_url)
  50.     num1 = num1+1            #记录这里的步骤,顺便给图片命名
  51.     filename = 'catch' + str(num1)+'.jpg'
  52.     img = url_open(page_url)
  53.     with open(filename,"wb")as f:
  54.         print('正在爬取图片,当前爬取第'+str(num1)+'张...')

  55.         f.write(img)
  56.         print('爬取成功!')


复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-28 16:45:43 | 显示全部楼层
希望有大神路过可以顺手帮我解答一下,感激不尽!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-28 17:30:26 | 显示全部楼层
今天我也遇到了类似的问题,返回的状态码是200,但是内容为空。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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