Python抓取淘宝女装信息(一)

浏览: 3205

本次实战案例以抓取淘宝上连衣裙信息为切入点,共抓取4356件连衣裙产品信息。在此基础上进行初步分析。这里首先感谢@大宇,后期的数据处理与图表制作全靠大神帮助。下面我们进入正式介绍环节。

淘宝、京东、链家等大型网站都采取了一定反爬策略,这篇主要讲解下爬取过程中遇到的坑与处理办法。关键词:正则表达式、json、selenium

第一步:页面分析

我们要抓取的商品页面:

image.png

这里用urllib.request或request.get方式提交网页链接后,在控制台下print出该网页源码,你会发现关于商品的店铺、省份、价格、销量等信息全都没有。当我们在审查工具中一个个点开XHR、JS、Doc下面的链接并分析时,(如下图)

image.png

会发现这些链接对应的网页中会有我们需要的商品关键信息,通过该链接可以提取出所需内容。但是…..构成这些链接的参数我们无法完全找到,甚至有些参数是动态加载的,这样就导致我们只能手动在审查工具中找到链接再提取信息,但是对于多级页面怎么办呢?在坑里待了好一段时间坑后,发现在<head>标签下有我们需要的信息(如下图)

image.png

这里我们用正则表达式匹配出该段信息。进一步可以发现它是一个json数据,用json.loads()解析。解析后我们可以借助在线工具可以查看数据的层级结构,找到需要数据的key。这里我们把页面分析与数据提取放到一块来讲了,代码逻辑:

    def get_content(self,url,fd):
s = requests.get(url)
content = s.content.decode('utf-8')
regex = 'g_page_config = (.+)'
items = re.findall(regex, content)
items = items.pop().strip()
items = items[0:-1]
items = json.loads(items)
print(items)
items = items['mods']['itemlist']['data']['auctions']
for item in items:

if 'item_loc' in item:
item_loc = item['item_loc']
else:
item_loc = u" "
if 'nick' in item:
nick = item['nick']
else:
nick = u" "
if 'raw_title' in item:
raw_title = item['raw_title']
else:
raw_title = u" "
if 'view_sales' in item:
view_sales = item['view_sales']
else:
view_sales = u" "
if 'view_price' in item:
view_price = item['view_price']
else:
view_price = u" "
if 'comment_url' in item:
comment_url = item['comment_url']
else:
comment_url = u" "
comment_url = 'https:'+comment_url
print("{0}——{1}——{2}——{3}——{4}——{5}".format(item_loc, nick, raw_title, view_sales, view_price, comment_url))
fd.write((item_loc+','+nick+','+raw_title+','+view_sales+','+view_price+','+comment_url + u"\n"))

第二步:翻页

翻页也是一个坑。商品有100页的信息,每页对应的链接里面有个参数是动态加载的,所以用selenium吧,每次抓完一页内容后点击下一页进行翻页操作。实践中我们发现“下一页”这个标签在不同页面的DOM中对应的位置是不一样的,有几页所在位置有些变化。代码逻辑:

    def next_url(self,now_url):
driver = webdriver.PhantomJS(executable_path='C:\PyCharm 2016.2.3\phantomjs\phantomjs.exe')
driver.get(now_url)
print(PAGE)
if PAGE < 4:
driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a/span[1]').click()
elif PAGE == 4:
driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[9]/a/span[1]').click()
elif PAGE == 5:
driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[10]/a/span[1]').click()
else:
driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[11]/a/span[1]').click()
time.sleep(3)
return driver.current_url

第三步:开始抓取

image.png

第四步:数据分析

我们提取了商品的店名、省份、销量(月)、单价、款式、对应链接,共6个字段。下面是初步分析结果

image.png

卖家还是主要集中在广州、杭州、上海等东部沿海地带

image.png

这些关键词的背后当然是“买买买”了 :D

image.png

大部分商家的月销量在50~300之间,1000件以上的销量的商家不到3%

image.png

价格整体不高,物美价廉,深受女生同胞喜爱,买买买....

image.png

各价位段中的商家普遍销量在50~100件之间。

=================================分割线=============================

本项目后续会继续更新,源码会在最后一期分享。感谢大家阅读 :)

推荐 8
本文由 watermelon 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

你好!能够将这个源代码贡献出来嘛?谢谢大神
大神,能够将数据分析这一块的代码分享出来嘛?
https://github.com/HunterChao 我的github,源码都在上面

要回复文章请先登录注册