python爬虫,g-mark网站图片数据爬取及补坑

应用python对g-mark网站图片数据爬取,同时但对于数据抓取失败的图片进行补坑(重新爬取操作),由于是日本网站,没有梯子访问的话,特别容易访问超时,比较合适的补坑操作是直接将数据采集到数据库,而本渣渣这里是采集保存到本地,所有,一些保存的数据需要二次格式化处理!

pic_001.png

爬取链接:g-mark.org/activity/2020/best100.html


第三方库:requests,fake_useragent,lxml


爬取关键点

1.requests访问超时重试的应用

访问超时重试,requests已经打包好,可以直接调用,很方便!

from requests.adapters import HTTPAdapter

s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))


2.xpaht 关键节点获取数据

链接节点

urllists=req.xpath('//ul[@class="itemList listB2"]/li/a/@href')

信息节点

basicinfos=req.xpath('//dl[@class="basicinfo"]//text()')

这里“//”,代表获取该节点元素下所有的数据内容!


图片节点

photos=req.xpath('//ul[@class="photo"]/li/a/img/@src')


3.数据格式化处理

网址拼接

parse_url='https://www.g-mark.org{}'.format(url)


数据过滤,整理

for basicinfo in basicinfos:
    if basicinfo != '\r\n\t\t\t':
        information=f'{information}:{basicinfo}'


过滤空白字符,整合拼接需要的字符内容数据,想要更加精细化数据,建议一个节点一个节点获取内容!


图片数据格式化处理

img_url=photo.split('?w')[0]
img_name=img_url[-24:]
print(img_url,img_name)


图片数据格式化,这里本渣渣指的是,图片链接及图片名的格式化处理,为下一步图片的下载及图片数据的保存做准备,这里需要结合实际情况进行处理,这里应用了切片处理及split函数!


4.访问超时出错的处理

访问超时出错,try-except,直接将出错的数据保存到本地txt中,方便数据补坑操作调用,这里没有保存到数据库,应该还是存储到数据库更加方便,大家看着操作吧!


链接访问超时出错处理

try:
    self.parse(parse_url,x)
except Exception as e:
    print(f"访问页面出错,错误代码:{e}")
    with open(f'fail_url.txt','a+') as f:
        f.write(f'{parse_url}-{x}\n')


图片下载超时出错处理

def dowm_img(img_url, img_name,x,y):
    try:
        r = self.s.get(img_url, headers=self.headers, timeout=10)
        with open(f'{x}_{y}_{img_name}', 'wb') as f:
            f.write(r.content)
        print(f"下载 {x}_{y}_{img_name} 图片成功")
    except Exception as e:
        print(f"下载图片出错,错误代码:{e}")
        with open(f'fail_img.txt', 'a+') as f:
            f.write(f'{img_url}-{x}_{y}_{img_name}\n')


5.数据补坑操作

出错数据记录,这里本渣渣用了“-”作为间隔存储数据,但是本身网站链接就有“-”字符,所以也算是自己给自己挖坑,在数据读取后,数据格式化处理费了点功夫,这类失误应该尽量避免!


出错数据读取

path=r'b\fail_img.txt'
with open(path,'r') as f:
    img_datas=f.readlines()

print(len(img_datas))


数据处理

img_data=img_data.split()[0]
img_url=f"{img_data.split('-')[0]}-{img_data.split('-')[1]}"
img_names=img_data.split('-')[2]
x=img_names.split("_")[0]
y=img_names.split("_")[1]
img_name=img_names[-24:]
print(img_url,img_name,x,y)


函数调用

数据补坑,直接调用写好的类,初始化操作,直接调用相关的函数,爽歪歪!

from gm import Gmark
spider=Gmark() #初始化类
spider.dowm_img(img_url,img_name,x,y) #图片下载函数调用
spider.parse(url, x) #链接爬取函数调用


以上都是渣渣瞎bb,仅供参考!




完整源码获取

关注本渣渣微信公众号:二爷记

pic_004.jpg

后台回复:g-mark


相关阅读:

类及数据库的应用,G-MARK网站数据Python爬虫系统的构建


pic_005.jpg

一脸蒙蔽,

对比以前写的,

怎么感觉代码越写越渣了?!