1前言
学了一段时间Python了,总结了相关的基础知识,所以想实践一下,看看成果如何。
如下图所示,实现了一个糗事百科网页爬虫
可以下载该[Demo APK](https://raw.githubusercontent.com/zxlworking/MyApplication_in_desaysv/master/test_qsbk/test_qsbk-debug.apk" Demo APK")使用
模拟用户通过浏览器访问请求
user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"headers = {"User-Agent":user_agent}
通过urllib2设置请求糗事百科某一页的数据
try: url = "http://www.qiushibaike.com/hot/page/%s" % page request = urllib2.Request(url, headers=headers) response = urllib2.urlopen(request) return response.read().decode("utf-8") except urllib2.URLError, e: if hasattr(e, "code"): print "e.code:" + e.code if hasattr(e, "reason"): print "e.reason:" + e.reason
依次为:用户ID、用户头像、用户昵称、用户信息、糗事内容、糗事图片、感觉好笑的人数、评论人数
def parse_qsbk_list(self, qsbk_list): pattern = re.compile( u"""<div class="article block untagged.*?id='(.*?)'.*?.*?(.*?).*?(.*?).*?(.*?)(.*?)<div id="qiushi_counts.*?""", re.S) return re.findall(pattern, qsbk_list)
在用户信息中判断是否被注释了,如果注释了则表示匿名用户
def parse_qsbk_anonymity(self, qsbk_anonymity): return re.findall("", qsbk_anonymity)
依次为***性别、年龄***
def parse_qsbk_author_sex_age(self, qsbk_author_sex_age): return re.findall("(\d+)", qsbk_author_sex_age)
解析糗事内容中是否有img标签
def parse_qsbk_thumb(self, qsbk_thumb): return re.findall("", qsbk_thumb)
依次为:好笑的人数、评论人数
def parse_qsbk_vote_comment(self, qsbk_vote_comment): return re.findall(u"(\d+) 好笑.*?\n.*?\n.*?\n.*?\n(\d+) 评论", qsbk_vote_comment)
每一个糗事内容用字典结构mQsbkParseElement 表示,其中每一个属性用键值对方式赋值,然后放入列表mQsbkParseEleements,最后通过json.dumps转换成json数据
mQsbkParseEleements = [] mQsbkParseElement = {} mQsbkParseElement["author_id"] = re.findall("\d+", qsbk_element[0])[0] mQsbkParseElement["author_head_img"] = "http:" + qsbk_element[1] mQsbkParseElement["author_name"] = qsbk_element[2] mQsbkParseElement["is_anonymity"] = 1 mQsbkParseElement["author_sex"] = SEX_MAN mQsbkParseElement["author_age"] = 0 mQsbkParseElement["content"] = qsbk_content mQsbkParseElement["has_thumb"] = 1 mQsbkParseElement["thumb"] = "http:" + qsbk_thumb[0] mQsbkParseElement["vote_number"] = int(qsbk_vote_comment[0][0]) mQsbkParseElement["comment_number"] = int(qsbk_vote_comment[0][1]) mQsbkParseEleements.append(mQsbkParseElement)result["code"] = 0result["desc"] = "success"result["current_page"] = page result["result"] = mQsbkParseEleements json.dumps(result, encoding="utf-8", ensure_ascii=False)
PS:糗事内容详情进行类似处理
参考Demo