Python抓取淘宝女装信息(一)
赵宏田,Python社区专栏作者
博客:https://zhuanlan.zhihu.com/pythoncoder
本次实战案例以抓取淘宝上连衣裙信息为切入点,共抓取4356件连衣裙产品信息。在此基础上进行初步分析。这里首先感谢@大宇,后期的数据处理与图表制作全靠大神帮助。下面我们进入正式介绍环节。
淘宝、京东、链家等大型网站都采取了一定反爬策略,这篇主要讲解下爬取过程中遇到的坑与处理办法。关键词:正则表达式、json、selenium
第一步:页面分析
我们要抓取的商品页面:
这里用urllib.request或request.get方式提交网页链接后,在控制台下print出该网页源码,你会发现关于商品的店铺、省份、价格、销量等信息全都没有。当我们在审查工具中一个个点开XHR、JS、Doc下面的链接并分析时,(如下图)
会发现这些链接对应的网页中会有我们需要的商品关键信息,通过该链接可以提取出所需内容。但是…..构成这些链接的参数我们无法完全找到,甚至有些参数是动态加载的,这样就导致我们只能手动在审查工具中找到链接再提取信息,但是对于多级页面怎么办呢?在坑里待了好一段时间坑后,发现在<head>标签下有我们需要的信息(如下图)
这里我们用正则表达式匹配出该段信息。进一步可以发现它是一个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
第三步:开始抓取
第四步:数据分析
我们提取了商品的店名、省份、销量(月)、单价、款式、对应链接,共6个字段。下面是初步分析结果
卖家还是主要集中在广州、杭州、上海等东部沿海地带
这些关键词的背后当然是“买买买”了
大部分商家的月销量在50~300之间,1000件以上的销量的商家不到3%
价格整体不高,物美价廉,深受女生同胞喜爱,买买买....
各价位段中的商家普遍销量在50~100件之间。
=================================分割线=============================
本项目后续会继续更新,源码会在最后一期分享。感谢大家阅读
免费爬虫视频获取: 关注公众号,“Python爱好者社区”,回复“爬虫”即可获取。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注