python html抓取,并用re正则表达式解析(二)

需求:
url: “http://search.jd.com/Search?keyword=幼猫猫粮&enc=utf-8#filter
给出一个jd_search(keyword)方法,keyword为你要查找的东西,比如:猫粮、手机,替换上面url中的keyword,得到一个新网页。用正则表达式解析此网页,得到每个物品的图片、标题、价格、链接,组成一个字典,最后将所有物品的信息放在一个列表中。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import urllib.request
import re

'''
url = "http://search.jd.com/Search?keyword=%E5%B9%BC%E7%8C%AB%E7%8C%AB%E7%B2%AE&enc=utf-8#filter"

print jd_search(keyword)

[dict,dict,dict]
dict {pic:'',title:'',price:'',url:''}
'''

def jd_search(keyword):
    #因为keyword是中文,所以需要先对中文进行转换
	keyword = urllib.parse.quote(keyword)
	url = "http://search.jd.com/Search?keyword={}&enc=utf-8#filter".format(keyword)
	
	result = []

	content = urllib.request.urlopen(url).read()

	content_data = content.decode('utf-8')

	pattern = re.compile(r'<li.*?data-sku="\d+".*?>.*?<div class="p-commit">',re.S)

	basic_content = re.finditer(pattern,content_data)

	for i in basic_content:
		init_dict = {}

		match_content = re.match(r'.*?<div class="p-img">.*?source-data-lazy-img="(.*?)".*?<div class="p-price">.*?<em>(.*?)</em><i>(.*?)</i></strong>.*?<div class="p-name p-name-type-2">.*?title="(.*?)" href="(.*?)".*?<div class="p-commit">',i.group(),re.S)

		init_dict['pic'] = match_content.group(1)
		init_dict['title'] = match_content.group(4)
		init_dict['price'] = match_content.group(2) + match_content.group(3)
		init_dict['url'] = 'http' + match_content.group(5)
		result.append(init_dict)
	return (result)

测试

print (jd_search('幼猫猫粮'))
print (jd_search('充电器'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值