学习笔记python爬取百度真实url
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记python爬取百度真实url相关的知识,希望对你有一定的参考价值。
今天跑个脚本需要一堆测试的url,,,挨个找复制粘贴肯定不是程序员的风格,so,还是写个脚本吧。
环境:python2.7
编辑器:sublime text 3
一、分析一下
首先非常感谢百度大佬的url分类非常整齐,都在一个类下
即c-showurl,所以只要根据css爬取链接就可以,利用beautifulsoup即可实现,代码如下:
soup = BeautifulSoup(content,‘html.parser‘) urls = soup.find_all("a",class_=‘c-showurl‘)
还有另外的一个问题是百度对url进行了加密,要想获得真实的url,我的思路是访问一遍加密的url,再获得访问界面的url,这时获取到的url即为真实的url。
完整代码如下:
#coding = utf-8 import requests from bs4 import BeautifulSoup import time headers = { ‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘, ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 QIHU 360SE‘ } page_start = raw_input(‘please input stratpage\n‘) page_end = raw_input(‘please input endpage\n‘) word = raw_input(‘please input keyword\n‘) if page_start == 1: page_start = 0 else: page_start = (int(page_start)-1)*10 page_end = (int(page_end)-1)*10 for i in range(page_start,page_end,10): url = ‘http://www.baidu.com/s?wd=‘+word+‘&pn=‘+str(i) try: response = requests.get(url,headers=headers,timeout=10) print ‘downloading...‘+url content = response.content soup = BeautifulSoup(content,‘html.parser‘) urls = soup.find_all("a",class_=‘c-showurl‘) for href in urls: a = href[‘href‘] try: res = requests.get(a,headers=headers,timeout=10) with open(‘urls.txt‘,‘a‘) as f: f.write(res.url) f.write(‘\n‘) time.sleep(1) except Exception,e: print e pass except Exception,e: print e pass
当然,这只是简单的功能,如果爬取大量的url,建议利用线程进行处理,不然等到爬完也等到地老天荒了。。。。。我是爬取百十来个url,亲测还可以。
本文出自 “踟蹰” 博客,请务必保留此出处http://chichu.blog.51cto.com/11287515/1963693
以上是关于学习笔记python爬取百度真实url的主要内容,如果未能解决你的问题,请参考以下文章