失踪人口回归系列,新的一年,各位大佬哥如何了,新年好!
搬砖许久,很久没写爬虫了,瞎写的,随便看看就好!
目标网址:https://award.kidp.or.kr/Exhibit/winners.do?cd_gubun=1&awards_cate1=1
通过浏览器抓包获取真实网址及数据,很明显,这是一个POST请求方式获取的json数据,我们可以使用python requests 模拟 post 请求方式获取数据,关键在于协议头和提交的数据!
这里关键在于协议头及请求数据的提交,其他直接调用就可以了!
参考源码
response=requests.post(url=url,data=data,headers=headers,timeout=10)
json_data =response.json()
print(json_data)
图片数据共有六个,由于图片数据存在数量差异,存在缺失图片的情况,比如三张、四张、五张,缺失的数据为None值,直接过滤处理掉多余的None!
参考源码
img1=row['img_physical_main']
img2=row['img_physical_sub1']
img3 = row['img_physical_sub2']
img4 = row['img_physical_sub3']
img5 = row['img_physical_sub4']
img6 = row['img_physical_sub5']
imgs=[img1,img2,img3,img4,img5,img6]
print(imgs)
#列表去除None
# 第一种:
# while None in imgs:
# imgs.remove(None)
# 第二种:
imgs = [i for i in imgs if i != None]
print(imgs)
简单的应用多线程下载图片,可供参考!
参考源码
def get_imgs(self,path,imgs):
threadings=[]
for img in imgs:
t=threading.Thread(target=self.get_img,args=(img,path))
threadings.append(t)
t.start()
for x in threadings:
x.join()
print(f"多线程下载图片完成")
由于外网及网络的不稳定性,如果想要图片数据不缺失,还是建议上重试机制,一个典型的重试请求下载的demo,仅供参考!
参考源码
# 4次重试
def get_response(self, url, headers):
i = 0
while i < 4:
try:
response = requests.get(url, headers=headers, timeout=8)
return response
except requests.exceptions.RequestException:
i += 1
print(f">> 获取网页出错,6S后将重试获取第:{i} 次")
time.sleep(6)
将爬取到的数据写入到 excel文件 中!
参考源码:
import xlsxwriter
#写入excel文件
def write_to_xlsx(self):
print(f'准备写入 {self.year} excel文件..')
workbook = xlsxwriter.Workbook('{}.xlsx'.format(self.year)) # 创建一个Excel文件
worksheet = workbook.add_worksheet(f'{self.year}')
title = ['链接id', '年份', '分类', '奖项', '标题','产品特点1','产品特点2','图片'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_list):
# content = content.rstrip()
# keyword, rank, include_num, chart_url, title, game_id, company_num, long_words_num = data
num0 = str(index + 2)
row = 'A' + num0
# data = [name, size, game_id]
print(data)
worksheet.write_row(row, data)
workbook.close()
print(f'写入 {self.year} excel文件成功!')
需要注意的是,worksheet = workbook.add_worksheet(f'{self.year}') 这里表名插入的数据是字符串而非整型,这个报错排查了许久,手疏了...
运行爬取效果
本文分享自 Python与SEO学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!