首页 > 代码库 > 【Python】网络爬虫(一):pyquery一瞥
【Python】网络爬虫(一):pyquery一瞥
1.pyquery简介
python中的pyquery模块语法与jquery相近,可用来解析HTML文件。官方文档地址:https://pythonhosted.org/pyquery/ 。通过HTML中的标签、id、给定的索引等来获取元素,使得解析HTML文件极为方便。
2.实例
2.1 爬取豆瓣电影页面中主演
右键chrome中的审查元素,观察到主演的标签为<a href=http://www.mamicode.com/"/celebrity/1005773/" rel="v:starring">
为找出主演,需要把带有rel="v:starring"的所有a标签找出来
# -*- coding: utf-8 -*- from pyquery import PyQuery as pq #读取Batman Begins页面 doc = pq(url="http://movie.douban.com/subject/1309069/") #遍历starring节点 starring = doc("a[rel=‘v:starring‘]").map(lambda i,e:pq(e).text()) #打印 print "<<"+doc("span[property=‘v:itemreviewed‘]").text()+u">>的主演\n" for i in starring: print i.encode(‘utf-8‘)
得到结果
2.2 百度贴吧爬虫
爬虫功能:将楼主的所发内容保存在本地txt文件中。
分析页面地址:只看楼主页面是贴子地址后加“?see_lz=1”,到第二页时,页面再加上“&pn=2”。分析页面元素:楼主所发内容正则表达式为id="post_content.*?>(.*?)
纯python版的百度贴吧爬虫(参看这里)
# -*- coding: utf-8 -*- #-------------------------------- # program: 百度贴吧爬虫 # date: 2014.4.29 #-------------------------------- from pyquery import PyQuery as pq import urllib2 import re class tiebaSpider: def __init__(self,link): #只看楼主页面 self.url = link+‘?see_lz=1‘ #读取页面 self.raw_html = urllib2.urlopen(self.url).read().decode(‘gbk‘) #获得贴子标题 self.title = re.findall(‘<h1.*?>(.*?)</h1>‘,self.raw_html)[0] #总共页数 self.total_pages = int(re.findall(r‘class="red">(\d+?)<‘,self.raw_html)[0]) self.contents = [] def get_contents(self): """获取所有页面的内容""" page = self.url+‘&pn=‘ for i in range(1,self.total_pages+1): #爬取每个页面 print u‘正在爬取第%d页内容...‘ %i raw_page = urllib2.urlopen(page+str(i)).read().decode(‘gbk‘) raw_contents = re.findall(‘id="post_content.*?>(.*?)</div>‘,raw_page) #处理页面,获得楼主的post cotent dealed_contents=pq(raw_contents).map(lambda i,e:pq(e).text()) for content in dealed_contents: content = (content+‘\n\n‘).encode(‘utf-8‘) #忘加encode,调试了许久 self.contents.append(content) def save_contents(self): """保存content,写入txt文件中""" self.get_contents() f = open(self.title+‘.txt‘,‘w+‘) f.writelines(self.contents) f.close() def main(): print u"请输入百度贴吧贴子链接" link = str(raw_input()) spider = tiebaSpider(link) spider.save_contents() if __name__ == "__main__": main()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。