背景

自己一直喊着要学爬虫,但是总是因为各种各样的事情耽误了。最近感觉不能再颓废了,于是乎重新拾起来这个小小的目标,开始学习。

开始

先是在知乎上如何入门 Python 爬虫?这个问题下看了看爬虫的基本概念和原理,发现原理和我之前的理解并没有什么出入,只是集群那一块是我之前没有关注到的。

然后,我找到了一个技术博客,看着那位程序媛写的一系列教程,基于Python3开始了我爬取单页面图片的尝试。

HTTP库用的是Urllib,HTML的解析工具,选用的是BeautifulSoup这个库。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from bs4 import BeautifulSoup
import urllib.request
#用做解析
import urllib.parse
#文件读写
import os
#返回请求到的内容
def url_open(url):
req = urllib.request.Request(url)
response = urllib.request.urlopen(req)
html = response.read()
return html
def get_links(url):
# 获取HTML源码
html = url_open(url)
#解析HTML
soup = BeautifulSoup(html, 'html.parser')
#定位父div
divs = soup('div', {'class': 'pic'})
#存储img的列表
img_addrs = []
#拿到每一个div中的img及其的src
for div in divs:
img_urls = div.find('img')['src']
img_addrs.append(img_urls)
return img_addrs
def save_imgs(folder,img_addrs):
for each in img_addrs:
filename = each.split('/')[-1]
with open(filename, 'wb') as f:
#读取网络图片
img = url_open(each)
f.write(img)
def download_pic(folder = 'pic'):
url = 'http://jcss.shangxin.link/spiderTest.html'
img_addrs = get_links(url)
os.mkdir(folder)
os.chdir(folder)
save_imgs('pic', img_addrs)
if __name__ == '__main__':
download_pic()

这段代码的功能只是在一个单页面上爬取一些照片,由于初学,自己挂了个结构简单的测试页面以供爬虫爬取测试…

踩的坑

  • 在这里,我特别注意到了网上很多代码中用的是Urllib2这个库,到了Python3中无法运行,这是因为Urllib和Urllib2出现在python2中,在3中,统一整合Urllib ,而没有了Urllib2。
  • urllib.request.urlopen()的参数中输入的是一个页面地址,有一次忘记加上协议(http://),导致报错(这不算坑,逃