本来是要准备发小说爬取得姊妹篇——scrapy,不过鉴于本熊是很理解scrapy的各个部分,所以决定暂时将小说爬取后延,不好意思啦,那么接下来,Python爬虫第一战——正则爬取百度贴吧图片
作为写的熊生中第一个爬虫,其实并没有留下什么美好的记忆,讲真,真的不是一段很友好的旅程
正则表达式,一段很特殊的字符串,用来匹配字符串并对对应字符串进行处理。
这里引用一个教程点击打开链接http://www.runoob.com/python/python-reg-expressions.html(这是笨鸟教程里有关正则的部分),到现在有些正则问题也不是很清楚,就不在这里胡言乱语了,还是直接上内容和代码吧。
这是我的爬取链接http://tieba.baidu.com/p/3815851566?pn=1 (女神吧)之前爬的找不到了。。。尴尬了
我们要爬的就是这种
这种妹纸的图片,分析网页源代码,找到了类似
src="http://imgsrc.baidu.com/forum/w%3D580/sign=1a2deace7a3e6709be0045f70bc69fb8/c2cd3cf33a87e9508881e58515385343f9f2b496.jpg"这种代码,下隐藏着不可预知的恩 。。其实就是图片啦。
那么上代码
#coding:utf-8
import re
import urllib # 导入模块
import time
def getHtml (): # 定义函数获取网址
x = 0
for i in range(1,6): # 通过循环的方式进行多页爬取
url='http://tieba.baidu.com/p/3815851566?pn=%d' % i # 观察发现页数随pn=后的数字变化
page = urllib.urlopen(url) # 调用函数打开网页
html = page.read() #读取网页内容
reg = r'src="(.+?\.jpg)" pic_ext' # 重中之重,根据网页源码写正则
imgre = re.compile(reg)
imglist = re.findall(imgre,html) #列表方式获取正则匹配结果
time.sleep(1)
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x+=1
getHtml() # 调用函数
有关代码的功能就看代码里的注释就好了,还会有另一分礼包,爬取
http://www.thebigdata.cn/ 大数据网站上的所有标题,当然,也是使用正则的,还是老规矩,看任务
就是类似于“我们以前把室内空气净化的事情搞成”,这些小标题。那么分析网页源代码
那些被红框包裹的内容就是我们所需要的内容,那么,上代码
#coding:utf-8
import re
import urllib
url='http://www.thebigdata.cn/'
def getHtml(url):
page = urllib.urlopen (url)
html = page.read()
return html # 调用函数获取解析网址
def getDSJ(html): # 定义函数,导入解析后网址
reg = r'</span><a href="([A-Z].*?\.html)"(.*?)>(.*?)</a>' # 正则匹配所需内容注意有关大小写匹配的问题、相关字符转义问题和匹配问题
lsre = re.compile(reg)
ls = re.finditer(lsre,html) # finditer函数以迭代器方式返回数据,findall函数不能同时匹配返回多个结果
return ls
html = getHtml(url)
ls = getDSJ(html) # 分别调用两个函数
fd=open(r'theBigDate2.txt','w+') # 打开文本
for item in ls :
fd.write(item.group(1)+'\t'+item.group(3)+'\n') # 将一三项值存入文本
fd.close()
有关部分代码功能请看注释
这就是我写的有关正则的两个简单的代码,欢迎各位大神批评指教,,THANKS