由于课程论文需要,花了两天爬取某宝的水果信息,是基于python的正则re、selenium、PhantomJS。代码可直接运行,但本文只以云南水果为主,如需爬取其它省份或者全国信息,只需更改主函数中的初始网页start_url即可。
我的习惯一般是采用xpath,此工具在一般的网页上使用无往不利,极为简单方便。但是对某宝页面却栽了跟头,你会发现你的xpath抓下来的数据据全是空的。这时才幡然醒悟,可能某宝的页面是动态的吧。那咱只好另谋出路了。
**说明:**
在淘宝输入水果,并选择云南省以后,进入第一层页面,网址为:
https://s.taobao.com/search?q=%E6%B0%B4%E6%9E%9C&suggest=0_1&_input_charset=utf-8&wq=shuiguo&suggest_query=shuiguo&source=suggest&cps=yes&ppath=122450261%3A52858&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s=0
,之后实现翻页功能只需将上面最后一个数字0改成44,88,...等等;
详见if __name__=="__main__":函数里面的内容。
# -*- coding: utf8 -*-
from lxml import etree
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import re
import json
import time
import numpy as np
def shuiguo(start_url):
head={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
html=requests.get(start_url,headers=head).content
##这里爬取第一层页面店铺名、水果名、发货地、价格等等信息,使用xpath尝试过,结果均为空。
#失败以后,我们右键——网页源代码,会发现第一页的店铺名、水果名、发货地、价格、水果网址等信息,
#都放在一个g_page_config的字典里面(PS:开始以为是json,却尝试用json.loads()提取不出来),
#于是我们选用正则爬取。具体代码见下:
fileds=re.findall(r'g_page_config = (.*?)</script>',html,re.S)#懒惰匹配
fileds=''.join(fileds).replace(';','')
fileds