C程序员一周入门python(二)
本来想先看完书《Web Scraping with Python》再去实践的,后来偷懒,直接到github上找了一个高票项目。然后在分析部分(因为要满足一周的要求。。。)这个项目的基础上,结束python入门。原项目使用MIT许可证,我就放心大胆的用了。项目地址:https://github.com/nladuo/taobao_bra_crawler#!/usr/bin/env python#
本来想先看完书《Web Scraping with Python》再去实践的,后来偷懒,直接到github上找了一个高票项目。然后在分析部分(因为要满足一周的要求。。。)这个项目的基础上,结束python入门。
原项目使用MIT许可证,我就放心大胆的用了。项目地址:https://github.com/nladuo/taobao_bra_crawler
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import sys
sys.path.append("../")
from lib.model import *
from lib.utils import *
from lib.config import *
reload(sys)
sys.setdefaultencoding('utf8')
class ItemCrawler:
""" 爬取淘宝文胸商品记录 """
def __init__(self):
self.client = init_client()
self.db = self.client[config['db_name']]
self.collection = self.db.items
def run(self):
urls = []
for i in range(1, 100 + 1):
urls.append("http://s.m.taobao.com/search?q=文胸&m=api4h5&page=" + str(i))
urls.append("http://s.m.taobao.com/search?q=胸罩&m=api4h5&page=" + str(i))
urls.append("http://s.m.taobao.com/search?q=bra&m=api4h5&page=" + str(i))
for url in urls:
print url
body = get_body(url)
if len(body) == 0:
continue
items = self.__parse(body)
self.__add_items(items)
self.__close()
def __parse(self, body):
""" 解析商品记录 """
items = []
try:
data = json.loads(body)
except:
return []
item_list = data['listItem']
if len(item_list) == 0:
return []
for _item in item_list:
item = Item(_item['item_id'], _item['userId'], _item['title'], False)
items.append(item)
return items
def __add_items(self, items):
""" 添加商品记录到数据库 """
for item in items:
if self.collection.find({'item_id': item.item_id}).count() == 0:
self.collection.insert(item.dict())
def __close(self):
""" 关闭数据库 """
self.client.close()
if __name__ == '__main__':
crawler = ItemCrawler()
crawler.run()
程序功能是抓取手淘前100页的以文胸/胸罩/bra为关键词的信息(共300页)。但是文中的URL返回的是JSON数据包这个令我很惊讶。不知道这个URL是怎么得出来的。。。
言归正传,这里分析一下一个C程序员在看到这段代码时的疑惑。
这个程序通过“python item_crawler.py”运行,这样运行的时候,或者也可以像执行shell脚本那样执行这个python脚本,执行的时候,python解释器将当前模块的__name__
设置为__main__
而这个模块import其它模块的时候__name__
是模块名,__main__
是每个模块都有的一个全局变量名(namespace仅限模块)。
所以上述代码从if开始执行
然后实例化一个ItemCrawler,这个时候会自动调用__init__
函数,这个函数初始化mongdb数据库,而且我们还注意到类的每个函数都含有一个self参数。最后crawler调用方法run。然后依次做URL的生成和抓取,并对返回的JSON数据包进行分析,并把采集的数据存储到mongodb。
好了,这样也算基本入门了,python语言层面虽然简单,但提供了很有用的功能,要结合具体项目去学习python的使用。
更多推荐
所有评论(0)