目标网页:http://www.axlcg.com/wmxz/1.html
首先取得第一页每一个图集的url
可以看到图集的url实在ul class 为homeboy-ul clearfix line-dot底下的li中的a标签里面,所以我们要 一层一层地接近目标。
allsoup = BeautifulSoup(allurldigit) # 得到解析后的html allpage = allsoup.find(‘ul‘, attrs={‘class‘: ‘homeboy-ul clearfix line-dot‘}) allpage2 = allpage.find_all(‘a‘) #一步找到所有的a标签 for allpage2index in allpage2: allpage3 = allpage2index[‘href‘] #拿到url if allpage3 not in allurl: #判断一下是否已经在容器里了,不在的话才加入 allurl.append(allpage3) #存到allurl这个list容器里
获取每一页的url
只获取一页怎么可以叫爬虫呢,我们要的是获取多页。
可以看到下一页的url就在ul为information-page-ul clearfix底下的一个li中,这时候发现所有的li标签都是相同的,那我们怎么才能找到下一页的url呢?
下一页的标签中的文字内容写着下一页,因此我们可以判断li中的文本内容是不是下一页,是的话跳到下一页去,爬取下一页的所有图集。
获取真正想要的img地址
随便点击一个图集进去,这时候我们可以看到图片的地址了。
复制一下,验证是否正确。
发现确实是我们想要的。
按同样的方法去获得图片的url并放到一个集合里,一个图集里也要跳到下一页的url,获取图片url,因为每一个页面只有一张。
下载图片到本地
urllib.request.urlretrieve(m, "D:/Desktop//image/" + str(count) + ".jpg")
第一个参数是img的url,第二个参数是路径+图片的文件名。
结果
代码
# !/usr/bin/env python # encoding=utf-8 # python爬取 http://www.axlcg.com/ 暖享 import requests from bs4 import BeautifulSoup import urllib.request allurl = [] img = [] count= 0 #伪装成浏览器 def download_page(url): return requests.get(url, headers={ ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.0 Safari/537.36‘ }).content # 爬取所有图集的url,放到一个list里 def get_all_url(): firsturl = "http://www.axlcg.com/wmxz/" pageindex = 0 while 1 and pageindex < 20: allurldigit = download_page(firsturl) # 首页面格式化 allsoup = BeautifulSoup(allurldigit) # 得到解析后的html allpage = allsoup.find(‘ul‘, attrs={‘class‘: ‘homeboy-ul clearfix line-dot‘}) allpage2 = allpage.find_all(‘a‘) for allpage2index in allpage2: allpage3 = allpage2index[‘href‘] if allpage3 not in allurl: allurl.append(allpage3) # 找下一页的url next_page1 = allsoup.find(‘ul‘, attrs={‘class‘: ‘information-page-ul clearfix‘}) next_page2 = next_page1.find_all(‘li‘) for next_page2_index in next_page2: # print(next_page2) next_page3 = next_page2_index.find(‘a‘) # print(next_page3) if next_page3.getText() == "下一页" and next_page3.get("href") != None: firsturl = next_page3.get("href") pageindex = pageindex + 1 print("总页面" + firsturl) print(allurl) print(len(allurl)) # 对每一个url进行下载图片 def main(): get_all_url(); i = 91 pagecount = 0; # 最多八页 index = 0 url = download_page(allurl[i]) soup = BeautifulSoup(url) i = i + 1 while index < 1000 and i < len(allurl): # print(allpage) # print(soup) page0 = soup.find("div", attrs={‘class‘: ‘slideBox-detail‘}) # print(page0) page = page0.find_all("li") # print(page) for pageindex in page: page2 = pageindex.find("img"); # print(page2) img.append(page2[‘src‘]) next = soup.find(‘ul‘, attrs={‘class‘: ‘information-page-ul clearfix‘}) next2 = next.find_all(‘li‘) for next_url in next2: # print(next_url) next_page = next_url.find("a") if (pagecount < 7 and next_page.getText() == "下一页" and next_page != None and next_page.get("href") != None): # print(next_page.get("href")) url = next_page.get(‘href‘) pagecount = pagecount + 1 url = download_page(url) soup = BeautifulSoup(url) break; elif (pagecount >= 7): url = download_page(allurl[i]) soup = BeautifulSoup(url) pagecount = 0 print(len(img)) download() print("新的页面" + allurl[i]) i = i + 1 break def download(): #print(len(img)) global img,count print("开始下载图片") for m in img: urllib.request.urlretrieve(m, "D:/Desktop//632/" + str(count) + ".jpg") count = count+1 print("正在下载第"+str(count)+"张") img = [] print("下载完毕") if __name__ == ‘__main__‘: main() #download();