基于淘宝商品信息的一次爬虫
暑期在家看了慕课嵩天老师的关于淘宝商品信息的爬虫,耐不住寂寞也来试试就,所以就有这次爬虫。
先看结果 嘿嘿 搞了好久才搞好的。
方法:利用python实现爬取淘宝某具体商品信息,再将其数据实现持久化。
一: 工具和环境
环境:python3
第三方模块:requests , re ,pandas
IDE: Pycharm
浏览器:QQ浏览器(本人Chrome 暂时用不了)
这些安装全部跳过,直接来干货!!!
二:下面代码
// Auther :Dath
// 2019/7/27
import requests
import re
import pandas as pd
def GetHtmlText(url, headers,cookies):
try:
r = requests.get(url, headers = headers , timeout = 30 , cookies = cookies)
r.raise_for_status()
r.encoding = r.apparent_encoding
print("页面访问成功 ")
#print(r.text)
return r.text
except:
return "页面访问失败"
def GetGoodsList(html, ulist):
#print(html)
try:
Raw_Ti = re.findall(r'\"raw_title\"\:\".*?\"',html) #获得标题
View_Pr = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) #获得价格
Item_loc = re.findall(r'\"item_loc\"\:\".*?\"',html) #获得商家地点
View_Sales = re.findall(r'\"view_sales\"\:\".*?\"',html) #获得购买人数
Nick = re.findall(r'\"nick\"\:\".*?\"',html) #获得店铺名称
print()
for i in range(len(Raw_Ti)):
title = eval(Raw_Ti[i].split(':')[1])
price = eval(View_Pr[i].split(':')[1])
loc = eval(Item_loc[i].split(':')[1])
sales = eval(View_Sales[i].split(':')[1])
nick = eval(Nick[i].split(':')[1])
ulist.append([title , price , loc , sales , nick])
except:
print("页面重新定向到淘宝登陆界面")
print(ulist)
def WriteToFile(ulist):
name = ["标题" , "价格" , "地点" , "购买人数" , "店铺"]
test = pd.DataFrame(columns=name, data=ulist)
test.to_csv(r'C:\Users\Administrator\Desktop\淘宝人工智能商品信息2.csv', index=0)
def main():
uinfo = []
for i in range(3):
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) Ap'
'pleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400'}
cookies = {'cookie':'*****************************************'}
url = 'https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20190724&stats_click=sear' \
'ch_radio_all%3A1&js=1&imgfile=&q=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&suggest=history_2&_input_charset=utf-8&wq=&' \
'suggest_query=&source=suggest&bcoffset= ' + str(3 - (3*i) ) + '&ntoffset=' + str(3 - (3*i) ) + '&p4ppushleft=1%2C48&s=' + str(44 * i)
print("页面URL是:"+ url)
html = GetHtmlText(url, headers , cookies)
GetGoodsList(html, uinfo)
WriteToFile(uinfo)
main()
1:关于headers 和 cookies(模拟浏览器上网)
headers 和 cookies 在淘宝中 打开你所要爬取的界面 F12 进入开发者权限
找到headers 和 cookies 内容后将内容复制添加进去 根据代码查看如果添加
因为淘宝有反爬虫机制,如果是一个陌生的URL会导致跳到登陆界面。这是嵩天老师没有讲到的 毕竟当时还没有出来
所以我为了解决这个问题就有了两个思路
第一利用cookies的内容来记住你的登陆信息。淘宝将密码加密存入到cookies中 ,利用cookies可以防止跳转到登陆界面
第二利用selenium库 但是我不会,就没用
三: 代码结果
四:代码思路
本次一共使用了三个函数GetHtmlText() , GetGoodsList() , WriteToFile() 和一个主函数main()
第一个函数GetHtmlText() 获取网页的源代码。因为源代码是这样的所以用
正则表达式 re来处理比较容易 当然了BeautifulSoup 库也是可以的
主要注意的就是cookies值一定要是你登陆淘宝后的cookies的值不然会提取不到Text内容
**第二个函数 GetGoodsList()**将利用正则表达式匹配到的内容加入到一个二维列表中
第三个函数WriteToFile() 将列表中的内容写入到csv文件中
test.to_csv(r'C:\Users\Administrator\Desktop\淘宝人工智能商品信息1.csv', index=0)
pandas库比较简单毕竟处理csv文件
主函数main()就是整个代码的思路
for i in range(3):
用来进行翻页爬取 。 url的话可以根据你所要找到网页进行看看,大致上url都是有规律可循的
整个的代码很简单,看看就知道思路了.需要考虑的问题就已经给你们说到了
五:总结
第二次写博客了。不容易啊 给个赞 鼓励鼓励我吧
如果大家有好的方法可以给我说下。有问题的话可以在下面评论 看到的话会回复的
2019/7/27 亲测有效