#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import re
import urllib2
from BeautifulSoup import BeautifulSoup
def search(key):
#请求搜索链接,关键字用参数key代替
search_url='http://www.baidu.com/s?ie=UTF-8&wd=key'
req=urllib2.urlopen(search_url.replace('key',key))
#计数变量,用来记录页数
count = 1
#主循环,抓取每一页的url,直到最后一页
while 1:
print "\033[1;31mpage %s:\033[0m" % count
html=req.read()
soup=BeautifulSoup(html)
f = open("result.txt",'a')
#url在<span>...</span>中,
content = soup.findAll('span',attrs={'class':'g'})
#对每一个对象解析
for i in content:
pat = re.compile("^(.+?) .*$")
#i为对象,所以用i.text转换为字符串
url = re.search(pat,i.text)
#url有可能匹配不到
if url:
f.write(url.group(1)+"\n")
print url.group(1)
else:
next
f.close()
#得到“下一页”的链接。除了第一页和最后一页,其他的会有2个元素。第一个为上一页,第二个为下一页。
#这里取倒数第一个元素
next_page='http://www.baidu.com'+soup('a',{'href':True,'class':'n'})[-1]['href']
#最后一页只有一个元素,倒数第一个是“上一页”,所以判断一下,如果只有一个元素,并且不是第一页就结束。
#否则可能会造成死循环
if count >1 and len(soup('a',{'href':True,'class':'n'}))==1:
print "\033[1;31mcomplete!\033[0m"
break
#不是最后一页就继续
else:
req=urllib2.urlopen(next_page)
count += 1
if __name__=='__main__':
key = "hello world!"
search(key)
python抓取搜索到的url,小型爬虫
最新推荐文章于 2021-03-26 17:58:12 发布