python爬虫(19)爬取论坛网站——网络上常见的gif动态图

写在前面的话~

有段时间没有写爬虫相关的文章了,今天抽时间把之前做的一个程序分享给大家。

经常逛A站和B站的人,肯定对一个节目不陌生《网络上常见的GIF动态图

今天就来分享一下,怎么通过爬虫自动的将这些个动作收藏到自己的电脑中(其实这个程序5月份就写好了,一直拖到现在才想起来将它分享出来)。

一.思路分析

按照爬虫的基本规律:

1.找到目标

2.抓取目标

3.处理目标内容,获取有用的信息

 

1.首先我们的目标是:http://gifcc.com/forum.php    即找动图就上 GIFFCC.COM

 

这个网站呢,是一个论坛式网站,里面分了几大类,反正试试各种动图。

我们的目标呢,就是找到这(收)些(藏)动(到)图(自)的(己)地(电)址(脑).

 

2.看一下各个模块的网址,看一下有什么规律

 

'http://gifcc.com/forum-37-1.html',#其他各种GIF动态图出处 
'http://gifcc.com/forum-38-1.html', #美女GIF动态图出处 
'http://gifcc.com/forum-47-1.html',#科幻奇幻电影GIF动态图出处
'http://gifcc.com/forum-48-1.html',#喜剧搞笑电影GIF动态图出处
'http://gifcc.com/forum-49-1.html',#动作冒险电影GIF动态图出处
'http://gifcc.com/forum-50-1.html'#恐怖惊悚电影GIF动态图出处

对的,没错,如果以游客身份访问,那么各个板块的网址就是这样的形式 http://gifcc.com/forum-XX -1.html

那么每个模块中的内容又有什么规律? 来直接上图:

 

 

我们关注的是当前页的网址,以及这个页码数,跳到第二页之后,地址变成:http://gifcc.com/forum-38-2.html

那么也就是说 网址的 规律就是 http://gifcc.com/forum-XX-XX.html

这里注意一点,网站的图片是动态加载的, 只有你往下滑动的时候,下面的图片才会逐渐的显现出来,这个暂且记下

 

 

3.每一张动图的所在页面的规律

 

其实这个没啥规律,但是只要我们找到单个图片的地址,就没啥难处理的了.

二 开工动手

1.获取入口页面内容

即根据传入的URL,获取整个页面的源码

	#仅仅获取页面内容
	def get_html_Pages(self,url):  
		try:   
			#browser = webdriver.PhantomJS(executable_path=r'C:\Python27\Scripts\phantomjs.exe') 
			browser = webdriver.PhantomJS() 
			browser.get(url)
			html = browser.execute_script("return document.documentElement.outerHTML")
			browser.close()
			html=HTMLParser.HTMLParser().unescape(html).decode('utf-8')
			return html
        #捕捉异常,防止程序直接死掉    
		except Exception,e:  
			print u"连接失败,错误原因",e
			return None   

这里我们使用了webdriver以及PhantomJS 这些模块,为什么呢?因为网页是动态加载的,这样可以抓取的数据全一点.

那这里还有个疑问, 为什么没有滑动啊什么的,得到的数据

 

2.获取页码数

	#获取页码		
	def get_page_num(self,html):

		doc = pq(html)  
		print u'开始获取总页码'
		#print doc('head')('title').text()#获取当前title
		try:
			#如果当前页面太多,超过8页以上,就使用另一种方式获取页码
			if doc('div[class="pg"]')('[class="last"]'):
				num_content= doc('div[class="pg"]')('[class="last"]').attr('href')
				print  num_content.split('-')[1].split('.')[0]
				return num_content.split('-')[1].split('.')[0]
			else:
				num_content= doc('div[class="pg"]')('span')
				return filter(str.isdigit,str(num_content.text()))[0]
		#如果获取页码失败,那么就返回1, 即值获取1页内容	
		except Exception,e:
			print u'获取页码失败'.e
			return '1'

这里的页码处理用到了一个模块pq, 即  PyQuery  
 from pyquery import PyQuery as pq 
采用PyQuery的方式查找我们需要的元素,感觉更好处理一点,挺方便的
同时这里的处理稍微有点意思,如果观察这个页面的话,会发现,每个模块的页码数,在上面和下面都有一个,然后我这里裁取的一下,因为我们只需要一个页码数字即可

 

3-6 第三步到第六步一起来说
其实就是根据页码数,来进行遍历&

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Python爬取百度图片并保存的示例代码: ```python # 导入依赖库 import requests import re import os # 设置搜索关键字 keyword = "美食" # 设置图片保存路径 save_path = "./images/" # 构造百度图片搜索的URL url = "https://image.baidu.com/search/index?tn=baiduimage&word={}".format(keyword) # 发送HTTP请求并获取响应 response = requests.get(url) # 使用正则表达式从响应内容中提取图片URL列表 img_urls = re.findall('"objURL":"(.*?)",', response.text, re.S) # 遍历图片URL列表并下载保存图片 for i, img_url in enumerate(img_urls): try: # 发送HTTP请求并获取响应 response = requests.get(img_url, timeout=10) # 设置图片保存路径 img_path = os.path.join(save_path, "{}.jpg".format(i)) # 保存图片 with open(img_path, "wb") as f: f.write(response.content) print("成功下载第{:>3d}张图片!".format(i+1)) except Exception as e: print("下载第{:>3d}张图片失败:{}".format(i+1, e)) ``` 解释一下上述代码的主要步骤: 1. 设置搜索关键字和图片保存路径 2. 构造百度图片搜索的URL 3. 发送HTTP请求并获取响应 4. 使用正则表达式从响应内容中提取图片URL列表 5. 遍历图片URL列表并下载保存图片 需要注意的是,这种方式只是简单的使用正则表达式从响应内容中提取图片URL,而没有使用任何API,因此可能存在一些不稳定性和容易被反爬虫机制封禁的风险。建议在使用时注意合理使用代理、设置请求头等防反爬措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值