利用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 就可以看到爬虫协议了,对于百度谷歌一些大型的公司爬虫都会遵守爬虫协议的,有些小型或者个人的就不一定了,总之我们要遵纪守法,文明上网,做个好公民。


分享到:


相關文章: