由于之前很多朋友表示Selenium很麻烦,于是我换了一种不使用Selenium的方法。
项目地址 https://github.com/3inchtime/mmjpg_spider
之前的思路是使用Selenium点击查看全部,一次操作获取全部的妹子图链接,但是很多朋友使用Selenium遇到了困难。
本篇思路非常简单,就是一页一页的访问,一页一页的爬图片链接。
# 获取图片的url的方法
def get_pic_urls(self):
for girl_url in self.girl_urls:
html = requests.get(girl_url).content
selector = etree.HTML(html)
page_num = int(selector.xpath('//*[@id="page"]/a[last()-1]/text()')[0])
self.girl_name = selector.xpath('//div[@class="article"]/h2/text()')[0]
self.pic_urls = []
for i in range(1, page_num+1):
girl_pic_url = ''.join([girl_url, '/' + str(i)])
html = requests.get(girl_pic_url).content
selector = etree.HTML(html)
pic_url = selector.xpath('//div[@id="content"]/a/img/@src')[0]
self.pic_urls.append(pic_url)
try:
self.download_pic()
except Exception as e:
print("{}保存失败".format(self.girl_name) + str(e))
首先获取这个妹子所有的图片数量
page_num = int(selector.xpath('//*[@id="page"]/a[last()-1]/text()')[0])
然后循环构造出每张图片的链接即可
self.pic_urls = []
for i in range(1, page_num+1):
girl_pic_url = ''.join([girl_url, '/' + str(i)])
html = requests.get(girl_pic_url).content
selector = etree.HTML(html)
pic_url = selector.xpath('//div[@id="content"]/a/img/@src')[0]
self.pic_urls.append(pic_url)
之后调用下载图片的方法即可
到了这里,很多朋友会抱怨了,这样爬取的效率太低,这个单进程的爬虫一直在等待网络的IO,并不高效,其实这个解决办法很简单,引入Python的协程就是很棒的解决办法,具体的实现方法,待我有时间慢慢更新,至于等多久我就不知道了......
仅供学习
转载注明出处
禁止商业用途
网友评论