如何用golang搜索php 抓取淘宝商品详情

用Java能实现抓取淘宝搜索结果吗?_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:596,938贴子:
用Java能实现抓取淘宝搜索结果吗?收藏
或者获取右边的代码也行, 不是单纯的网页代码,是动态生成的那种。
java是如今比较热门的编程语言,用途非常广泛,---无锡达内,专业java培训,javaO基础小班授课,java专家领衔授课,毕业后入职名企!
浏览器收到的都数人家编晚的静态页面
能够一直抓取 就是动态了
Java肯定能,我用其他语言给顾客做过搜索采集相关的软件
我写了个抓狗东的淘宝没试过
你目前看到的结果都是通过动态生成的静态代码。如果你想要结果,直接去发送搜索请求给淘宝,它会返回你需要的数据。but,如果是想返回单纯的数据目测非常的男。一般的方法都是在html代码里提取有用的数据,除非你能找到返回的数据接口,比如json这些。
白银星玩家
百度星玩家累积成长值为1,
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Scrapy爬虫框架:抓取淘宝天猫数据 - 推酷
Scrapy爬虫框架:抓取淘宝天猫数据
有了前两篇的基础,接下来通过抓取淘宝和天猫的数据来详细说明,如何通过Scrapy爬取想要的内容。完整的代码:下载。
通过淘宝的搜索,获取搜索出来的每件商品的销量、收藏数、价格。
首先,打开淘宝的搜索页面,在里面输入:硬盘,选中列表模式(因为列表模式没有广告)。
获取到现在浏览器上面的地址:
/search?q=硬盘&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.-taobao-item.1&ie=utf8&initiative_id=tbindexz_&style=list
在出现的商品列表中有很多硬盘,我们需要获取到这些商品的详细信息,也就是它的跳转链接,比如:
///item.htm?spm=a230r.1.14.19.QzLRla&id=&ad_id=&am_id=&cm_id=ed55e27b&pm_id=&abbucket=14
然后再把详细地址的内容全部请求出来,里面包含了销量、价格、收藏数量。
所以,最终的目的是通过获取两个页面的内容,一个是搜索结果,从里面找出来每一个商品的详细地址,然后第二个是商品详细内容,从里面获取到销量、价格等。
有了思路现在我们先下载搜索结果页面,然后再下载页面中每一项详细信息页面。
def_parse_handler(self, response):
''' 下载页面 """
self.driver.get(response.url)
很简单,通过
self.driver.get(response.url)
下载内容,如果直接使用response中的网页内容是静态的。
获取想要的内容(Selector)
上面说了如何下载内容,当我们下载好内容后,需要从里面去获取我们想要的有用信息,这里就要用到选择器,选择器构造方式比较多,只介绍一种,
&&& body = '&html&&body&&span&good&/span&&/body&&/html&'
&&& Selector(text=body).xpath('//span/text()').extract()
这样就通过xpath取出来了
这个单词,更详细的xpath教程
Selector 提供了很多方式出了xpath,还有css选择器,正则表达式,
,具体内容就不多说,只需要知道这样可以快速获取我们需要的内容。
简单的介绍了怎么获取内容后,现在我们从第一个搜索结果中获取我们想要的商品详细链接,通过查看网页源代码可以看到,商品的链接在这里:
&p class="title"&
&a class="J_ClickStat" data-nid="" href="///item.htm?spm=a230r.1.14.46.Mnbjq5&id=&ns=1&abbucket=14" target="_blank" trace="msrp_auction" traceidx="5" trace-pid="" data-spm-anchor-id="a230r.1.14.46"&WD/西部数据 WD30EZRZ台式机3T电脑&spanclass="H"&硬盘&/span& 西数蓝盘3TB 替绿盘&/a&
使用之前的规则来获取到a元素的href属性就是需要的内容:
selector = Selector(text=self.driver.page_source) # 这里不要省略text因为省略后Selector使用的是另外一个构造函数,self.driver.page_source是这个网页的html内容
selector.css(".title").css(".J_ClickStat").xpath("./@href").extract()
简单说一下,这里通过css工具取了class叫
的p元素,然后又获取了class是
J_ClickStat
的a元素,最后通过xpath规则获取a元素的href中的内容。啰嗦一句css中如果是取id则应该是
selector.css(&#title&)
,这个和css中的选择器是一致的。
同理,我们获取到商品详情后,以获取销量为例,查看源代码:
&ulclass="tm-ind-panel"&
&liclass="tm-ind-item tm-ind-sellCount" data-label="月销量"&&divclass="tm-indcon"&&spanclass="tm-label"&月销量&/span&&spanclass="tm-count"&881&/span&&/div&&/li&
&liclass="tm-ind-item tm-ind-reviewCount canClick tm-line3" id="J_ItemRates"&&divclass="tm-indcon"&&spanclass="tm-label"&累计评价&/span&&spanclass="tm-count"&4593&/span&&/div&&/li&
&liclass="tm-ind-item tm-ind-emPointCount" data-spm="1000988"&&divclass="tm-indcon"&&a href="///vip/index.htm" target="_blank"&&spanclass="tm-label"&送天猫积分&/span&&spanclass="tm-count"&55&/span&&/a&&/div&&/li&
获取月销量:
selector.css(".tm-ind-sellCount").xpath("./div/span[@class='tm-count']/text()").extract_first()
获取累计评价:
selector.css(".tm-ind-reviewCount").xpath("./div[@class='tm-indcon']/span[@class='tm-count']/text()").extract_first()
最后把获取出来的数据包装成Item返回。淘宝或者天猫他们的页面内容不一样,所以规则也不同,需要分开去获取想要的内容。
Item是scrapy中获取出来的结果,后面可以处理这些结果。
Item一般是放到
import scrapy
class Product(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
last_updated = scrapy.Field(serializer=str)
&&& product = Product(name='Desktop PC', price=1000)
&&& printproduct
Product(name='Desktop PC', price=1000)
&&& product['name']
&&& product.get('name')
&&& product['price']
&&& product['last_updated']
Traceback (mostrecentcalllast):
KeyError: 'last_updated'
&&& product.get('last_updated', 'not set')
&&& product['lala'] # gettingunknownfield
Traceback (mostrecentcalllast):
KeyError: 'lala'
&&& product.get('lala', 'unknown field')
'unknown field'
&&& 'name' in product
# is namefieldpopulated?
&&& 'last_updated' in product
# is last_updatedpopulated?
&&& 'last_updated' in product.fields
# is last_updated a declaredfield?
&&& 'lala' in product.fields
# is lala a declaredfield?
&&& product['last_updated'] = 'today'
&&& product['last_updated']
&&& product['lala'] = 'test' # settingunknownfield
Traceback (mostrecentcalllast):
KeyError: 'Product does not support field: lala'
这里只需要注意一个地方,不能通过
product.name
的方式获取,也不能通过
product.name = &name&
的方式设置值。
添加Pipeline过滤结果
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
清理HTML数据
验证爬取的数据(检查item包含某些字段)
查重(并丢弃)
将爬取结果保存到数据库中
现在实现一个Item过滤器,我们把获取出来如果是None的数据赋值为0,如果Item对象是None则扔掉这条数据。
pipeline一般是放到
pipelines.py
defprocess_item(self, item, spider):
if itemis not None:
if item["p_standard_price"] is None:
item["p_standard_price"] = item["p_shop_price"]
if item["p_shop_price"] is None:
item["p_shop_price"] = item["p_standard_price"]
item["p_collect_count"] = text_utils.to_int(item["p_collect_count"])
item["p_comment_count"] = text_utils.to_int(item["p_comment_count"])
item["p_month_sale_count"] = text_utils.to_int(item["p_month_sale_count"])
item["p_sale_count"] = text_utils.to_int(item["p_sale_count"])
item["p_standard_price"] = text_utils.to_string(item["p_standard_price"], "0")
item["p_shop_price"] = text_utils.to_string(item["p_shop_price"], "0")
item["p_pay_count"] = item["p_pay_count"] if item["p_pay_count"] is not "-" else "0"
return item
raiseDropItem("Item is None %s" % item)
最后需要在
settings.py
中添加这个pipeline
ITEM_PIPELINES = {
'TaoBao.pipelines.TTDataHandlerPipeline': 250,
'TaoBao.pipelines.MysqlPipeline': 300,
后面那个数字越小,则执行的顺序越靠前,这里先过滤处理数据,获取到正确的数据后,再执行
TaoBao.pipelines.MysqlPipeline
添加数据到数据库。
完整的代码:下载。
可能会遇到的一些问题
之前说的方式都是直接通过命令
scrapy crawl tts
来启动。怎么用IDE的调试功能呢?很简单通过main函数启动爬虫:
写到Spider里面
if __name__ == "__main__":
settings = get_project_settings()
process = CrawlerProcess(settings)
spider = TmallAndTaoBaoSpider
process.crawl(spider)
process.start()
302重定向的问题
在获取数据的时候,很多时候会遇到网页重定向的问题,scrapy会返回302然后不会自动重定向后继续爬取新地址,在scrapy的设置中,可以通过配置来开启重定向,这样即使域名是重定向的scrapy也会自动到最终的地址获取内容。
解决方案:
settings.py
REDIRECT_ENABLED = True
命令行参数传递
很多时候爬虫都有自定义数据,比如之前写的是硬盘关键字,现在通过参数的方式怎么传递呢?
解决方案:
重写初始化函数
def __init__(self, *args, **kwargs):
直接在函数参数添加自定义参数:
def __init__(self, dt=None, keys=None, *args, **kwargs):
super(TmallAndTaoBaoSpider, self).__init__(*args, **kwargs)
dt 和 keys是自定义的参数。
命令行使用。命令行是通过
参数来传递的,需要注意的是
只能传递一个参数,如果需要传递多个参数,使用多次
scrapy crawl tts -a keys=&硬盘,光驱& -a dt=&&
IDE中main函数使用。
if __name__ == "__main__":
settings = get_project_settings()
process = CrawlerProcess(settings)
spider = TmallAndTaoBaoSpider
process.crawl(spider, keys="硬盘,光驱", dt="")
process.start()
数据不全(selenium并不知道什么时候ajax请求完成),延时处理
大部分时候,我们可以取到完整的网页信息,如果网页的ajax请求太多,网速太慢的时候,selenium并不知道什么时候ajax请求完成,这个时候如果通过
self.driver.get(response.url)
获取页面,然后通过Selector取数据,很可能还没加载完成取不到数据。
解决方案:通过selenium提供的工具来延迟获取内容,直到获取到数据,或者超时。
def_wait_get(self, method):
延时获取,如果10秒钟还没有获取完成,则返回失败
:param method:
result = None
result = WebDriverWait(self.driver, 10).until(method)
self.__error("超时获取:%s
%s" % (self.driver.current_url, self.driver.title))
return result
这里以获取评论为例:
item['p_comment_count'] = self._wait_get(lambdadr: Selector(text=self.driver.page_source).xpath("//li/div/div[@class='tb-rate-counter']/a/strong/text()").extract_first())
在10秒以内会一直执行这个lambada函数:
lambdadr: Selector(text=self.driver.page_source).xpath("//li/div/div[@class='tb-rate-counter']/a/strong/text()").extract_first()
直到这个函数返回的不是None,或者10秒后返回超时。
robots.txt不让爬取
Scrapy爬取遵循robots协议,就是网站定义了哪些数据可以爬取,哪些不能爬取,如果网站不允许爬取,还是想爬怎么办?
解决方案:
settings.py
中忽略robots协议,添加参数:
ROBOTSTXT_OBEY = False
请求数量配置
默认的数量是16,可以修改大一些,
settings.py
CONCURRENT_REQUESTS = 50
完整的代码:下载。
** 免责声明:该内容只为传递知识,如果用做他途后果自负。**
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致新技能:审查元素 如何用审查元素看淘宝分词?
怎么通过后台代码查看淘宝分词呢,下面就教大家利用审查元素看淘宝分词组合关键词优化标题。
第一步:在自己店铺或者淘宝的搜索框内,按全称搜索自己的某一宝贝,出来的搜索结果列表页。
记住:一定要按照宝贝全称来搜索,这样是为了调用系统搜索程序,让它把你的标题所有词都滤一遍!还有,就在搜索列表页,不要点进去宝贝详情页!
第二步:将鼠标放在标题上,右键单击,在出来的菜单中选择“审查元素”。
点审查元素后,页面下方会出现代码
第三步:有两种方法显示分词结果,简单的就是点这个长框框“a href&前面的这个三角形,分词结果马上就出来了。另一种方法,要是眼神不好半天找不到这个”a href&的,可以用小红框框里面的放大镜,点一下,然后将鼠标放回标题上,这时候鼠标旁边会出现这样的情况,此时再点击鼠标,分词结果就会出现在代码区。与点击“a href&前面的三角形是一样的效果。
这样找出分词的好处就是:通过你宝贝的属性或分类,找出你的宝贝标题关键词组合,利于宝贝排名。最好结合数据工具,比如数据魔方等淘宝内部数据工具,得到最优质的宝贝标题词组合(如下图)。亲可以试下哦,只要学到了,运用了,一定产生不一样的效果哦。分词是关键词的最小单位,所以至关重要。不要让这些小小的细节影响了宝贝的搜索排序哦!当然,你也可以偷看到你对方的标题分词情况,从中择优选用哦。
貌似有的浏览器右键里面没有审查元素,如果是这样,请换个浏览器试试,我自己亲自试验的360浏览器丶谷歌浏览器都没问题,通过别人反应百度浏览器丶淘宝浏览器也都可以的。
给大家简单讲一个例子,如下图
从上图我们可以看到系统是如何给标题分词的,一般来说名词特别是类目词都是优先被划分成分词的。复制宝贝整个标题进行搜索,是为了调用系统搜索引擎,让它把所有的分词都过滤一遍。
有时你会发现这样一个问题,就是本意是:分开的两个字、但系统把它当做一个分词处理了!(举个例子:本意是2015冬,潮;但系统把冬潮划分成一个分词了!!!)
也就是说,不管我们宝贝权重多高,【短筒女鞋&冬、绒面平底鞋&冬】这样的关键词我们几乎都拿不到展现,因为我们标题里没有【冬】这个分词,解决的办法就是把&冬和潮&分开写,在中间插入一个分词,比如&我们截图上面的【秋冬潮】就很好、或者写成:冬季新款潮。
更多电商信息敬请关注皇冠俱乐部!}

我要回帖

更多关于 抓取淘宝商品评论数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信