关于初学python的一点问题总结(二)
目录
总结
今天爬取的页面不是昨天的百度百科,今天尝试对漫画网站的图片进行抓取,在钢之炼金术师 这本漫画的第一话尝试进行抓取。
步骤
首先是分析页面的元素块,在页面中,发现所看的漫画的图片元素都是img
标签,并且其中都含有id=mhpic
这下子就很好办了。跳转到img
标签里面的src
属性所指向的URL可以发现的确是我们需要的图片。
先尝试抓取一个页面的图片的URL。具体代码如下:
def getimgurl(url):
html=urlopen(url)
bsObj=BeautifulSoup(html.read(),"html.parser")
imgs= bsObj.findAll('img',id="mhpic")
for img in imgs:
print("getImgURL: "+img['src'])
return img['src']
在拿到图片的URL之后,如何下载到本地呢,查了一下其他相关博客,发现在库里面有一个很关键的方法:
urllib.request.urlretrieve(imgurl,'%s.jpg' % i)
简直完美!
这下子图片就下载到本地了,存储路径可以自己写,具体参考urlretrieve()
方法,这里就不做说明。
抓一话来试试
获取和下载图片没问题了之后,就开始找<a>
标签,准备开始跳转了。
参考页面发现“下一页”也有一个特殊的id=mhona
,然而整个页面中,除了”下一页”,“上一页”也有这个id
, 这个时候,通过一点小技巧来获取“下一页”,代码如下:
def nextpage(url):
html=urlopen(url)
bsObj=BeautifulSoup(html.read(),"html.parser")
anexts=bsObj.findAll('a',id="mhona")
print(url)
for anext in anexts:
if(anext.get_text()=="下一页"):
print("nextPage: "+anext.attrs['href'])
return "http://manhua.fzdm.com/17/001/"+anext.attrs['href']
由于这个只是针对第一话的图片的测试,所以并没有返回自动填充的url,只能抓取第一话的图片内容。(其实通过分析也可以看出来,/17就指的是这部漫画,/001是第一话,后面可以修改源码然后对整个网站进行漫画抓取)
一点小小的问题
- 这是python3的代码
- 这个demo只能针对很小的一块,要爬取一部漫画需要进行改进代码
- 抓取的最后,页面无法获取到“下一页”时候会报错,加一个try来抛出异常就可以解决。