”明月如霜,好风如水,清景无限 “
最近,因为毕设的临近。更新的很少,不过文远下一篇资料上也差不多都找好了。前天,有位老哥因为毕设要做裂缝检测,但是没裂缝数据。所以叫文远爬一下。文远当然是选择安排了。
百度搜图图片爬取
这个我就不想多说了,毕竟网上一搜一大把,但是综合起来有个要点就是。用旧版本的百度爬取会方便一些,因为旧版百度有页码,可以翻页。但是新版百度是下拉,因此都是动态加载的。
结果
搜索的关键词是裂缝检测。结果后面有很多的垃圾图片(baidu fw)
原以为是正常的网站,直接爬:
import requests
# from lxml import etree
import re
import os
url = "https://www.irit.fr/~Sylvie.Chambon/AigleRN_GT.html"
url = 'https://www.irit.fr/~Sylvie.Chambon/AigleRN_noGT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/ESAR_GT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/ESAR_GT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/LCMS_GT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/LCMS_noGT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/LRIS_GT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/LRIS_noGT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/TEMPEST2_GT.html'
url = 'https://www.irit.fr/~Sylvie.Chambon/TEMPEST2_noGT.html'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
}
response = requests.get(url=url,headers=headers)
html_text = response.text
# tree = etree.HTML(html_text)
ex = 'SRC=(.*?) NO'
new_url = re.findall(ex,html_text,re.S)
# print(new_url)
len(new_url)
(建议用正则表达式啊,(.*?)经典操作,不多解释啊,自己搜,可以看看前面的文章),小技巧是,输出一下html_text ,帮助更好的写ex.
结果是能得到对应的照片的url,但是不能爬到图片。看原因八成需要cookies.令文远震惊的是,居然没有Cookies参数。看来我只能自建会话Session了。
参数里并没有Cookies参数,无法偷懒。
先保存png对应网址
代码如下:
part = r'https://www.irit.fr/~Sylvie.Chambon/'
for i in new_url:
img_url = part + i
file_name = path + r'\new_url.txt'
with open(file_name,'a+') as f:
f.write(img_url+'\n')
要注意的地方是,网站的分析。
part = r'https://www.irit.fr/~Sylvie.Chambon/'。
最后也就是代码,正式爬取的代码了:先加载网址列表
new_url = []
with open(r'E:\git_test_ipynb_爬虫\ipynb_爬虫\郑哥\new_url.txt','r',encoding = 'utf-8') as f:
new_ur = f.readlines()
new_url = []
for i in new_ur:
new_url.append(i.split('\n')[0])
len(new_url)
正式爬取图片并保存:
import requests
# from lxml import etree
import re
import os
path = r'E:\git_test_ipynb_爬虫\ipynb_爬虫\郑哥\pic'
if not os .path.exists(path):
os.mkdir(path)
headers = {
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection': 'keep-alive',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
'Upgrade-Insecure-Requests': '1'
}
A = requests.Session()
A.headers = headers
for a,b,c in os.walk(path):
print('当前路径图片:',c)
current_num = len(c)
# part = r'https://www.irit.fr/~Sylvie.Chambon/'
for j,i in enumerate(new_url[592:]):
file_name = path +'\\{}.jpg'.format(current_num + j)
# print(file_name)
# print(part+new_url[0])
# Result = A.get(url = part+new_url[0], timeout = 5, allow_redirects = False)
response = A.get(url = i, allow_redirects = False)
# response=requests.get(url=part+new_url[0],headers=headers)
img_data=response.content
# print('print(response.status_code)',response.status_code)
with open(file_name,'wb') as f:
f.write(img_data)
print("正在爬取。。。。。" +str(current_num + j)+':' + ".....")
一定记得要建立会话Session,即:
A = requests.Session()
A.headers = headers
response = A.get(url = part+new_url[0], timeout = 5, allow_redirects = False)
总的来说,只要你用浏览器能打开的资源,你要相信可以爬到。
(小技巧:开梯子会下载更快,网站貌似也有反爬,发现爬取变慢,可以停一下,然后更改new_urlfor j,i in enumerate(new_url[592:]):
,文远就是592张之后爬取的特变慢,于是改new_url为new_url[592:])如果对你有帮助,请点赞关注星标,代码请点击阅读原文。相关问题可以微信联系文远。再加一个数据集下载地址。
壹句: 没有理想的人不伤心----new pants