所谓网络爬虫就是从特定的网页中获取你想要的东西,更确切的说,是从网页源代码中筛选你想要的东西。
本文将用比较简单的方法从网页中下载一些图片。
主要工具模块有:urllib.request 和html.parser 是的,真如你所见,不用正则表达式
步骤很简单:
1.获取网页源代码
2.从源代码中提取需要的信息(这里指图片的下载链接)
3.将图片链接打开并下载到目录。
抓的网址为:http://www.easyicon.net/iconsearch/book/ (下载图标)
代码如下:
1.获取网页源代码
# getimage.py
import urllib.request
from html.parser import HTMLParser
url = 'http://www.easyicon.net/iconsearch/book/'
# pretend as a browser
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1;\
WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 '}
url2 = urllib.request.Request(url, headers=headers)
# get the source code form url
fb = urllib.request.urlopen(url2)
souCode = fb.read().decode('utf-8')
注意:如果不加上headers进行封装,鉴于大多数网页都有反爬虫策略,你很有可能会得到403错误!!!
2.从源代码中获取信息
因为这是一个筛选的过程,所以你最好写打开网页源代码看看你需要的东西具体表现是什么(可以有火狐或Google游览器点击右键获得),比方说下载图片即是找到下载的链接,然后将其拿下来,比方说我要找的就是这个:
<a href="http://download.easyicon.net/png/504077/128/" title="PNG 格式图标下载">
里面的地址
这里用简单的HTMl解析器,而不用正则表达式(具体怎么用见文档):
# get what you want form souCode
downLists = []
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == 'a':
if len(attrs) == 2:
if attrs[1][1] == 'PNG 格式图标下载':
downLists.append(attrs[0][1])
parser = MyHTMLParser()
parser.feed(souCode)
3.将链接下载并保存到目录:
# download form urlLists to your catalog
i = 0
for lists in downLists:
print(lists)
urllib.request.urlretrieve(lists, 'C:\image\down%s.png' % i)
i += 1
照葫芦画瓢,就可以下载其他东西了