参考于 https://blog.csdn.net/sunflowerduidui/article/details/51057995
本人Python新手:本来想简简单单试一个爬虫,结果还是没有找到适合Python3.7这个版本的,之后就参考上面链接,结合自己的一些理解,和上网找的一些资料
同上面链接一样,这里也是仅抓取静态非登录的网页,以慕课网python专栏为例:http://www.imooc.com/course/list?c=python
大体思路如下:
先用urllib.request打开网页,然后用模块re的正则表达式抓取图片的相对位置,然后利于urllib.parse.urljoin这个方法去找到它的绝对地址,然后在进行读取图片。
最后完成的代码如下:
import urllib.request
import re
import urllib.parse
def crawling():
req = urllib.request.urlopen('http://www.imooc.com/course/list?c=python') #访问网页
html=req.read().decode("utf-8") #读取该网页的html代码,同时将其转换为utf-8编码
#html=req.read().decode("gbk")
reg=r'src="(.+?\.jpg)"' #正则表达式,匹配当前图片的字符
imgre=re.compile(reg) #创建正则表达式的例子
imglist=imgre.findall(html) #在html中找到匹配的项
count=1
for img in imglist:
img_add=urllib.parse.urljoin(html,img) #通过解析该匹配项的绝对地址,因为提取到的项都是相对位置,需要进行转换
f=open("D:\\write\\"+str(count)+".jpg",'wb')
img_html=urllib.request.urlopen("http:"+img_add)
picture=img_html.read()
f.write(picture)
f.close()
count+=1
crawling()
大家可以参考一下,仅做简单的爬取。最后提醒,不同的网站有不同的编码,当前的代码可能不适用,需要进行对正则表达式进行修改,同时还要看取到的地址是否为绝对地址,这样才能进行图片的下载。