近期想完全自己动手实现一个deep learning的多分类任务,数据集直接用Python在网页上抓取,主要用到Python模块:
-- re模块(正则表达式)
-- requests模块
一 用到的Python模块简介
1、 re模块
正则表达式是一种强大的用于字符串匹配的工具,很多编程语言中(包括Python)都有正则表达式的概念,就是用预先定义好的特定字符串、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
re 模块使 Python 语言拥有全部的正则表达式功能。
常用的函数
re.match()方法
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search()方法
re.search 扫描整个字符串并返回第一个成功的匹配。
findall()方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表2 requests模块
requests
是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。
二 从百度图片抓取
#coding=utf-8
import re
import requests
import os
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
global num
print('find: ' + keyword + ' pictures ')
for each in pic_url:
print('Downloading' + str(num) + 'st url:' + str(each))
try:
pic = requests.get(each, headers=headers,timeout=10)
except requests.exceptions.ConnectionError:
print('Error this picture cant download')
continue
image_name = '%4d.jpg'%num
dir = os.path.join(outp_dir,image_name)
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
num += 1
if __name__ == '__main__':
word = '猫'
outp_dir = '/home/fangsh/projects/hashiqi'
#url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Mobile Safari/537.36'}
pagestart = 0
pageend = 100
num = 0
'''添加代理
proxies = {
http:'http://...'
https:'https://...'
}
'''
for idx in range(pagestart,pageend):
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&pn=%d&gsm=3c&ct=&ic=0&lm=-1&width=0&height=0'%idx*20
#result = requests.get(url,headers=headers,proxies=proxies)
result = requests.get(url, headers=headers)
dowmloadPic(result.text, word)
if num >=1000:
break