- 帖子
- 8
- 精华
- 0
- 积分
- 45
- 阅读权限
- 10
- 注册时间
- 2017-8-5
- 最后登录
- 2017-9-11
|
本帖最后由 vocaliu 于 2017-8-15 18:25 编辑
刚学,基础基本没有,直接四处看爬虫希望能边玩边学。
1,四处拼代码弄的爬虫爬妹子图网站,虽然现在能用了,但是里面有个正则搞不定,导致实现的很丑。- # -*- coding: utf-8 -*-
- """
- Created on Sun Aug 13 00:47:22 2017
- @author: vocaliu
- @version:Anaconda python3.6
- """
- import urllib
- import urllib.request
- import re
- import os
- from multiprocessing import Pool
- def download_page(url):
- head = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
- 'Referer': 'http://www.meizitu.com',
- } #伪装浏览器登陆
- request = urllib.request.Request(url,headers=head) #构建请求
- response = urllib.request.urlopen(request,timeout=10)
- data = response.read() #获得服务器响应并读取链接内容(网页、图片或其他)
- return data #返回值就是链接中的具体内容
-
- def imgdownload_num(startnum,stopnum):
- for szwz in range(startnum,stopnum): #这个数字不断变化来抓不同链接
- url = url0 + str(szwz) + '.html' #合并网址
- os.mkdir('F:\pic\{}'.format(szwz)) #新建与网址一样的文件夹
- wronglink = 0
- try:
- html = download_page(url) #在这里做一轮try except,防止遇到错误的抓取页面导致的报错
- regx = r'http://[\S]*\.jpg' #通过正则配对,得到页面中的jpg图片链接
- pattern = re.compile(regx) #re.compile() 可以把正则表达式编译成一个正则表达式对象.
- img_link = re.findall(pattern,repr(html)) #repr()类似str,用处不一样。
- except:
- wronglink += 1
- print('发现第{}个错误的抓取网址'.format(wronglink))#设置时会有一些指向404页面的网址
- break
- num = 1
- wrongpiclink = 0
- for img in img_link:
- try:
- image = download_page(img) #将每个img_link链接中的图片都读取出来,并保存成下面的本地链接
- if len(image) > 45000: #大小不到45k的图跳过
- with open('F:\pic\{}\{}.jpg'.format(szwz,num),'wb') as fp:
- fp.write(image)
- print('pic{}-{} downloaded'.format(szwz,num))
- num += 1
- else:
- continue
- except:
- wrongpiclink += 1
- print('发现第{}个错误的图片链接'.format(wrongpiclink))#源文件里有一些指向404页面的图片
- return
- url0 = 'http://www.meizitu.com/a/'
- #开始多进程爬
- if __name__ == '__main__':
- print('Parent process %s.' % os.getpid())
- p = Pool(8)
- for i in range(8):
- p.apply_async(imgdownload_num, args=(i*8+1,i*8+9))
- p.close()
- p.join()
- print('All subprocesses done.')
复制代码 正则匹配那儿忘了抄的谁的了,抓的是图里所有的jpg文件,然后只能自己再加个len()>45k来删掉文件大小较小的缩略图。- regx = r'http://[\S]*\.jpg'
复制代码 实际上网站的图是两种,
- 无效缩略图 src="http://mm.howkuai.com/wp-content/uploads/2017a/05/08/limg.jpg" alt
- 需要抓的图 src="http://mm.howkuai.com/wp-content/uploads/2017a/06/13/01.jpg" />
复制代码 感觉本该很简单,但是我真不会写。。。
2,爬另一个网页,要抓文字内容不会抓,目标是抓文字然后整理数据库分析,在这个过程中熟悉python的操作。不过代码完成度几乎为0就不贴了。
网页上要抓的内容在一个table里,希望能抓到张三丰这三个字,所有的网页对应位置的标签内容都是一样的,感觉应该也好写,但是不会。。。
- 姓 名:</font></td><td height="26" width="757"><font size="4" color="#000080"> 张三丰 </font></td></tr>
复制代码 |
|