|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
前几天写了一个爬虫:
import requests
import pymongo
def save_to_mongo(goods_list,goods):
# 定义客户端
client = pymongo.MongoClient()
#定义数据库名称
taobaoDB = client['taobao']
# 定义表名,根据输入的商品名称来定义表
table_name = taobaoDB[goods]
for each in goods_list:
table_name.update({'name':each['name']},{'$set': each}, True)
def get_detail(response,goods):
import re
# 找到并获取商品名称,价格,产地,购买人数
items = re.findall(r'"raw_title":"([^"]+)".*?"detail_url":"([^"]+?)".*?"view_price":"([^"]+?)".*?"item_loc":"([^"]+?)".*?"view_sales":"([^"]+?)"',response.text,re.S)
#print(items)
goods_list = []
#print(items)
for item in items:
# encode时总是出错,但是单独把字符串拿出来encode却不会报错 begin
print(item[1])
#print(str('//detail.tmall.com/item.htm?id\u003d566734808746\u0026ns\u003d1\u0026abbucket\u003d0'.encode('utf-8'))[2:-1])
# end
print(item[0],str(item[1].encode('utf-8'))[2:-1],item[2],item[3][:3])
result = {
'name':item[0],
'url':str(item[1].encode('utf-8'))[2:-1],
'price':item[2],
'location':item[3],
'sales_cnt':item[4][:3]
}
goods_list.append(result)
save_to_mongo(goods_list,goods)
def get_pages():
goods = input("请输入需要查找的商品名:")
payload = {'q': goods,'s': '1','ie':'utf8'}
# 实现翻页,方法有多种,这是其中一种
# 观察淘宝翻页时的网址变化:
# 第二页 https://s.taobao.com/search?q=cloth&s=44
# 第三页 https://s.taobao.com/search?q=cloth&s=88
# 这个可能和浏览器分辨率有关,需要在实现时注意
for i in range(0,2):
url = 'https://s.taobao.com/search'
response = requests.get(url,payload)
#response.encoding = 'utf-8'
#print(response.text)
get_detail(response,goods)
payload ['s'] = 44*i+1
get_pages()
这其中在
item[1].encode('utf-8')
执行这一句时,无法正常把网址中包含的乱码解析成数字或符号,但是如果把一个str类型的变量单独拿出来做encode,却可以完美完成,不知是何缘故 |
|