利用python+xpath爬蟲爬取百度貼吧的圖片

什麼是python爬蟲,簡單來說就是在萬維網上爬取大量數據進行篩選出對我們有價值的數據就是爬蟲,下面是一個使用python2爬取百度貼吧圖片的爬蟲,爬蟲確實是一個很實用的技能來的,可以說在網絡上但凡肉眼看得到的東西,爬蟲都可以爬取下來,都有詳細的註釋,下面直接上代碼;

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
import requests
import os
import urllib
import time
from lxml import etree
#通過url獲取每個帖子鏈接
def getArticleLinks(url):
	html = requests.get(url)
	selector = etree.HTML(html.text)
	#通過Xpath 獲取每個帖子的url後綴
	url_list = selector.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href')
	print("url_list的鏈接是是是是...",url_list)
	#在每個後綴前加上百度貼吧的url前綴
	for i in range(len(url_list)):
		url_list[i] = 'http://tieba.baidu.com' + url_list[i]
	return url_list
	print("帖子的鏈接:",url_list)
#通過帖子的鏈接,下載圖片
def get_img(url):
	html = requests.get(url)
	selector = etree.HTML(html.text)
	url_list = selector.xpath('//*[@class="BDE_Image"]/@src')
	img_name = 0
	for each in url_list:
		urllib.urlretrieve(each, 'pic_%s.jpg' % img_name)
		img_name += 1
#每個帖子創建文件夾,下載圖片
def downloads_img(url_list,num):
	if not os.path.exists('downloads'):
		os.mkdir('downloads')
	get_dir = os.getcwd()
	for each in url_list:
		img_dir = 'downloads' + each[23:].replace("/",'')
		if not os.path.exists(img_dir):
			os.mkdir(img_dir)
		os.chdir(img_dir)
		get_img(each)
		os.chdir(get_dir)
if __name__ == '__main__':
	print u"請輸入下載貼吧鏈接"
	get_url = raw_input('')
	if not get_url:
		get_url = 'https://tieba.baidu.com/f?kw=%E5%A3%81%E7%BA%B8&ie=utf-8'	
	num = ''
	while True:
		print u'請輸入下要載帖子數'
		num = raw_input('')
		if re.findall(r'^[0-9]*[1-9][0-9]*$',num):
			num = int(num)
			break
	ArticleLinks = getArticleLinks(get_url)
	downloads_img(ArticleLinks,num)

在現實生活工作中,我們應該要遵從爬蟲協議,一般中大型的網站都會有一個自己的爬蟲協議來告訴爬蟲機器人哪些可以爬哪些是不能爬的,就是這個robots.txt文件說明,一般放在網站的根目錄下面,比如直接訪問 http://www.soo1.top/robots.txt 就可以看到爬蟲協議了,對於百度谷歌一些大型的公司爬蟲都會遵守爬蟲協議的,有些小型或者個人的就不一定了,總之我們要遵紀守法,文明上網,做個好公民。


分享到:


相關文章: