首页 > 编程语言 >几步完成Python爬虫采集附源码

几步完成Python爬虫采集附源码

时间:2023-03-22 10:32:43浏览次数:44  
标签:img Python self 爬虫 url 源码 print path

对于长期做爬虫行业的程序员我来说,现在随便编写一个爬虫程序也只是分分钟的事情,这次我编辑一个有关图文采集的爬虫,从试错到下载保存等一些列重点全部都写入下面的文章中希望大家避坑。

这里应用self.log简单的做了一下运行日志的处理和记录!

几个关键点:

1、常规操作,访问出错重试

这里仅仅是简单的写了访问出错重试,没有排除掉其他访问出错,比较简单粗暴的处理。

参考代码:

# 六次重试
def s(self, url, headers,timeout=10, num_retries=6):
print(f">>正在爬取 {url}")
try:
response = requests.get(url, headers=headers, timeout=timeout)
time.sleep(2)
except:
if num_retries > 0: #num_retries是我们限定的重试次数
time.sleep(6) #延迟六秒
print(u'获取网页出错,8S后将获取倒数第:', num_retries, u'次')
return self.s(url, headers, timeout, num_retries - 1)
else:
print(f">> 访问 {url} 失败!")
with open("fail_url.txt", 'a+', encoding='utf-8') as f:
f.write(f'{url}\n')
print(f'保存访问失败网页链接成功!')
response = []

return response

2、多线程下载图片

比较简单应用多线程,来进行图片的下载处理,一定程度上提高了下载图片的效率。

参考源码:

#多线程下载图片
def dowm_imgs(self,img_urls,path):
threadings=[]
for img_url in img_urls:
t= threading.Thread(target=self.get_img,args=(img_url,path))
threadings.append(t)
t.start()

for x in threadings:
x.join()

print("多线程下载图片完成")

3、re正则简单应用,替换不合法的字符

其实在保存文件时,有不少特殊字符是违法字符,需要进行替换处理,不然保存文件会报错,尤其是你用它来建立保存路径,命名为文件名的时候!

参考源码:

#替换不合法字符
def filter(self,old_str):
pattern=r'[\|\/\<\>\:\*\?\\\"]'
new_str= re.sub(pattern, "_", old_str) # 剔除不合法字符
return new_str

4、获取所有链接

参考源码:

#获取列表链接
def get_urllist(self):
for i in range(1,13):
if i==1:
url=self.url
else:
url="日本デザインセンター | Nippon Design Center, Inc.".format(i)
response=self.s(url,self.headers)
html=response.content.decode('utf-8')
tree=etree.HTML(html)
hrefs=tree.xpath('//div[@class="worksCard js-loadItem"]/a/@href')
hrefs=["日本デザインセンター | Nippon Design Center, Inc.{}".format(href) for href in hrefs]
print("已获取到第 {} 页作品链接为:".format(i))
print(hrefs)
self.urllist.extend(hrefs)

print("恭喜,共获取 {} 条链接!".format(len(self.urllist)))

5、保存为文本文件

参考源码:

#保存文本内容
def save_txt(self,title,content,path):
print("开始保存 {} 内容".format(title))
with open(f'{path}{title}.txt','w',encoding='utf-8') as f:
f.write(content)
print("保存 {} 内容成功!".format(title))

6、下载图片

参考源码:

#下载图片
def get_img(self,img_url,path):
r=self.s(img_url,self.headers)
if r:
img_name=img_url.split('/')[-1]
with open(f'{path}{img_name}.jpg','wb')as f:
f.write(r.content)
print("下载图片成功!")
time.sleep(1)
else:
print("下载图片失败!")
with open(f"{path}fail_img.txt", 'a+', encoding='utf-8') as f:
f.write(f'{img_url}\n')
print(f'保存访问失败的图片链接成功!')

爬取效果

几步完成Python爬虫采集附源码_保存文件

标签:img,Python,self,爬虫,url,源码,print,path
From: https://blog.51cto.com/u_13488918/6142205

相关文章

  • Python——面向对象编程(十一)
    1.对象的封装#coding=utf-8#对象的封装#类的概念"""类的名字:当名字由多个单词构成时,我们采用驼峰命名法就是说多个单词,每个单词的首字母需要大写这也是python的......
  • Windows上编译github源码方式运行Node-RED,以及离线迁移安装Node-RED
    场景上面是在Windows可以连接外网的情况下安装运行的Node-RED,如果再局域网内的Winserver2012的服务器,没法访问外网,怎样安装运行Node-RED。注:关注公众号霸道的程序猿获取......
  • Python爬虫完整代码拿走就用
    对于新手做Python爬虫来说是有点难处的,前期练习的时候可以直接套用模板,这样省时省力还很方便。使用Python爬取某网站的相关数据,并保存到同目录下Excel。直接上代码:importre......
  • Python爬虫完整代码拿走就用
    对于新手做Python爬虫来说是有点难处的,前期练习的时候可以直接套用模板,这样省时省力还很方便。使用Python爬取某网站的相关数据,并保存到同目录下Excel。直接上代码:imp......
  • python 编写一个程序用lambda查找输入给定的字符串是否是以'a'开头 是返回True
    https://www.cnblogs.com/frazer-cxy-jsfx/这段代码可以双重输入,双重判断,data1=input('请输入一个字符串:')#data2=input('请输入一个字符串:')aed=lambdax:......
  • 如何自己搭建Scrapy爬虫框架
    当你学了一段时间爬虫后,就会知道各种功能太多而且麻烦。还不如自己整理个框架方便的多。因此,从开始写爬虫程序开始,就会慢慢的接触到一些有关爬虫的框架、效率提升而且扩展......
  • Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据
    全文下载链接:http://tecdat.cn/?p=17748最近我们被客户要求撰写关于销售量时间序列的研究报告,包括一些图形和统计输出在本文中,在数据科学学习之旅中,我经常处理日常工作中......
  • biopython Bio.Alphabet
    参考:https://biopython.org/wiki/Alphabet作用:1.记录序列的分子类型(DNA,RNA或蛋白质),2.在序列、alignment、motif等中声明预期的字符。在Biopython1.78及以后的版......
  • 便签_Python
    模糊合并中的笔记process.extractOne(query="中国平安",choices=["中国平安"],scorer=fuzz.token_set_ratio,score_cutoff=0)pr......
  • # yyds干货盘点 # 怎么用Python把左边这种转成右边这种?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【惜君】问了一个​​Pandas​​处理Excel的问题,这里拿出来给大家分享下。下面是粉丝自己写的代码:二、实现过程看上去是......