|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我是一个刚刚接触python一个月不到的菜鸟,在B站看小甲鱼的视频,学到了很多,但是老是会遇到一些问题,怎么也想不明白,需要人点透一下,所以来论坛发帖求助,希望大家多多指教,一起进步。
前些天写了一个爬图片的爬虫,但是遇见2个问题,想了很久也想不明白。
1. 图片基本上能抓,但是总是会混入很多“加载中”的灰色图片,在反馈的信息中又得知是已读取出来的图片地址,浏览器访问地址可以正常打开和访问,为什么python下载之后却变成了加载中的小灰图。
搜索了一些资料,表示这关系到JS动态,需要考虑到Jason的相关情况,但是我就卡在这个点上,不明白应该怎么去处理。
因为我的理解:访问的Status Code: 200,这不是代表网速很好访问很快吗?为什么python访问却还是加载不出来呢?还需要用到js?而且一些图的大小只有几十KB,但是依然抓到的是加载图,其他有几百KB的却能够正常抓取。
2.我的正则表达式是http\S.*jpg——意思是下要http开头jpg结尾,中间可以是任意字符但是不要空格的url地址,但是图片抓到109张的时候,总是会抓到一些中间带空格的,然后程序就会报错,我不太明白这里是为什么。
希望路过的大神们帮我解答一下
- import urllib.request #引入网站请求模块 request
- import os #引入文件管理模块
- import random
- import re
- houzhui = random.randint(10000,100000)
- wenjianjia = '爬虫'+str(houzhui)
- print('新建了一个文件夹,名字是:'+wenjianjia)
- def download_mm(folder = wenjianjia):
- os.mkdir(folder) #创建文件夹
- os.chdir(folder)
- if __name__== '__main__':
- download_mm()
- def url_open(url): #自定义一个方法url_open()
- req = urllib.request.Request(url) #方法为请求一个url链接将他赋值给rep
- 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")
- #给rep加上一个浏览器header伪装成人为访问
- response=urllib.request.urlopen(url)
- #将这个网站基本页面抓取
- html=response.read()
- #从文件指针所在的位置,读到文件结尾
- print('================') #打印出网址
- print('读取到的网址是:'+url)
- print('================')
- return html
-
- def find_imgs(url): #定义了一个方法
- html=url_open(url).decode("utf-8") # 将网页打开变成utf-8编码并赋值给html
- img_addrs=[] #定义img_addrs是一个列表
- text=str(html)
- m=re.findall("http\S.*jpg",text)
- img_addrs=m
- return img_addrs
- print('请输入你要爬图的网页')
- temp=input()
- if temp=="":
- temp='http://www.budejie.com/'
- url=str(temp)
- img_addrs=find_imgs(url)
- total = len(img_addrs)
- print('当前网址是:'+url)
- print('当前图片总数一共是: '+str(total)+' 张')
- print(img_addrs)
- print('===========')
- print(' 分割线 ')
- print('===========')
- num1 = 0
- for x in img_addrs:
- page_url = str(x) #得到要爬取的页面的链接
- print('获得的图片网址是:'+page_url)
- num1 = num1+1 #记录这里的步骤,顺便给图片命名
- filename = 'catch' + str(num1)+'.jpg'
- img = url_open(page_url)
- with open(filename,"wb")as f:
- print('正在爬取图片,当前爬取第'+str(num1)+'张...')
- f.write(img)
- print('爬取成功!')
复制代码 |
|