开发工具:
Mac电脑
PyCharm
Python3.7
工具包 bs4、os、requests
网页信息
![img]()
从上面这张图我们可以看出,一页有多套图,这个时候我们就要想怎么把每一套图分开存放(后边具体解释)
通过分析,所有信息在页面中都可以拿到,我们就不考虑异步加载,那么要考虑的就是分页问题了,通过点击不同的页面,很容易看清楚分页规则
![img]()
很容易明白分页URL的构造,图片链接都在源码中,就不做具体说明了明白了这个之后就可以去写代码抓图片了
存图片的思路
因为要把每一套图存入一个文件夹中(os模块),文件夹的命名我就以每一套图的URL的最后的几位数字命名,然后文件从文件路径分隔出最后一个字段命名,具体看下边的截图。
![img]()
![img]()
这些搞明白之后,接下来就是代码了(可以参考我的解析思路,只获取了30页作为测试)全部源码,下面的源码有原文中的有点不一样。
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| from bs4 import BeautifulSoup import os import requests
class doutuSpider(object): headers = { "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}
def get_url(self, url): data = requests.get(url, headers=self.headers) soup = BeautifulSoup(data.content, 'lxml') totals = soup.findAll("a", {"class": "list-group-item"}) for one in totals: sub_url = one.get('href') global path path = "/Users/mark/Desktop/Mark/doutu/" + sub_url.split('/')[-1] os.makedirs(path, exist_ok=True) try: self.get_img_url(sub_url) except: pass
def get_img_url(self, url): data = requests.get(url, headers=self.headers) soup = BeautifulSoup(data.content, 'lxml') totals = soup.find_all('div', {'class': 'artile_des'}) for one in totals: img = one.find('img') try: sub_url = img.get('src') except: pass finally: print(sub_url) try: self.get_img(sub_url) except: pass
def get_img(self, url): filename = url.split('/')[-1] global path img_path = path + '/' + filename print('正在下载----', url) print('存储地址为----', img_path) try: img = requests.get(url, headers=self.headers) with open(img_path, 'wb') as f: f.write(img.content) f.close() except requests.RequestException: print('请求图片出错', url)
def create(self): for count in range(1, 2): url = 'https://www.doutula.com/article/list/?page={}'.format(count) print('开始下载第{}页'.format(count)) self.get_url(url)
if __name__ == '__main__': doutu = doutuSpider() doutu.create()
|
结果
![img]()
![img]()
![img]()
总结
总的来说,这个网站结构相对来说不是很复杂,大家可以参考一下,爬一些有趣的
原创作者:loading_miracle,原文链接:
https://www.jianshu.com/p/88098728aafd