澳门威尼斯人赌场python爬虫爬取天猫商品信息

现在人们哪怕是买个牙刷可能都会在淘宝上面,而且在买东西的时候每个人都会做的一件事情就是看评论,看看之前买家评论了解商品质量,外观是不是和图片一样等等。但是如果真的想要一条一条去看的话,那时间是真的要很多,当然了如果买的小物件那倒无所谓,如果是比较贵重的物品就必须得好好看了(PS:在小编心里100以上就是贵重物品,哈哈哈哈)

前面介绍了使用selenium和chromedriver通过模拟浏览器运行的方式可以做到在浏览器中看到是什么样,抓取的源码就是什么样。不用再去管网页内部的JavaScript是如何渲染页面,也不用管网页后台的Ajax接口有哪些参数,甚至是加密规律等。这篇博客是实战演练,通过Selenium爬取淘宝网商品的图片,名称,价格,购买人数,店铺名称,店铺所在地信息,将结果保存至Mongodb数据库中。

一. Selenium和PhantomJS介绍

本文实例为大家分享了python爬取淘宝商品的具体代码,供大家参考,具体内容如下

我的代码

from bs4 import BeautifulSoup

path = './index.html'

with open(path, 'r') as f:
    soup = BeautifulSoup(f.read(), 'lxml')
    pics = soup.select('body > div > div > div.col-md-9 > div > div > div > img')  #图片地址
    prices = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right') #价格
    titles = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')  #商品标题
    rates = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p:nth-of-type(2)')  #评分星级
    counts = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')   #评分量

    infos = []
    for pic, price, title, rate, count in zip(pics, prices, titles, rates, counts):
        info = {
            'pic': pic.get('src'),
            'price': price.get_text(),
            'title': title.get_text(),
            'rate': len(rate.find_all("span", "glyphicon glyphicon-star")),
            'count': count.get_text()
        }
        infos.append(info)
        print(info)

威尼斯人棋牌游戏 1

上一篇博客只介绍了chromedriver在windows下的安装

Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样。由于这个性质,Selenium也是一个强大的网络数据采集工具,其可以让浏览器自动加载页面,这样,使用了异步加载技术的网页,也可获取其需要的数据。

import requests as req 
import re 

def getHTMLText(url): 
 try: 
 r = req.get(url, timeout=30) 
 r.raise_for_status() 
 r.encoding = r.apparent_encoding 
 return r.text 
 except: 
 return "" 

def parasePage(ilt, html): 
 try: 
 plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) 
 tlt = re.findall(r'\"raw_title\"\:\".*?\"', html) 
 for i in range(len(plt)): 
  price = eval(plt[i].split(':')[1]) 
  title = eval(tlt[i].split(':')[1]) 
  ilt.append([price, title]) 
 except: 
 print("") 


def printGoodsList(ilt): 
 tplt = "{:4}\t{:8}\t{:16}" 
 print(tplt.format("序列号", "价格", "商品名称")) 
 count = 0 
 for j in ilt: 
 count = count + 1 
 print(tplt.format(count, j[0], j[1])) 

def main(): 
 goods = "python爬虫" 
 depth = 3 
 start_url = 'https://s.taobao.com/search?q=' + goods 
 infoList = [] 
 for i in range(depth): 
 try: 
  url = start_url + '&s=' + str(44*i) 
  html = getHTMLText(url) 
  parasePage(infoList, html) 
 except: 
  continue 
 printGoodsList(infoList) 

main() 

总结

  • Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库
  • Copy selector和Copy Xpath都是描述一个元素在网页中位置的方式
  • find_all(“p”, “title”)

  # [<p class="title"><b>The Dormouse's story</b></p>] 

返回的是CSS Class为”title”的”p”标签

 

Selenium模块是Python的第三方库,可以通过pip进行安装:

效果图:

如果是一般人为了让自己买的东西放心当然是选择一条一条看,或者直接去实体店买。但是身为技(chui)术(niu)人(zhuang)员(bi)的小编,肯定是用Python批量爬取淘宝商品信息并进行简单的数据分析啦~威尼斯人棋牌游戏 ,~~~

对应版本的下载和测试安装是方法是一样的

pip3 install selenium

威尼斯人棋牌游戏 2

威尼斯人棋牌游戏 3

//解压unzip chromedriver_linux64.zip//移动到环境变量所在的目录sudo mv chromedriver /usr/bin//或者将chromedriver所在目录,添加到环境变量export PATH="$PATH:所在目录"//执行新的配置source ~/.porfile

Selenium自己不带浏览器,需要配合第三方浏览器来使用。通过help命令查看Selenium的Webdriver功能,查看Webdriver支持的浏览器:

更多内容请参考专题《python爬取功能汇总》进行学习。

 

1.ajax请求分析

威尼斯人棋牌游戏 4pic1

_ksTS,rn这两个参数很难发现其规律,所以这里不采用构造Ajax请求的方式来爬取内容,而通过selemium价格网页最终呈现效果的HTML代码全部爬取下来,再来提取所要信息

from selenium import webdriver

help(webdriver)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

想要爬取评论第一件事就是找到真实的URL地址,具体步骤:

2.商品分析

威尼斯人棋牌游戏 5pic2需要说明的是src
data-src都是商品图片的网络地址,区别是前者是缩略图而后者是高清大图,两者都可以任意爬取,这里爬取的是后者威尼斯人棋牌游戏 6pic3

这里不点击下一页,而是通过自动输入页面数来进行页面跳转,一方面是要实时监控爬取到多少页,另一方面,当程序出现异常,下一次运行又从第一页开始,下一页依次爬取,数据库中,会有重复记录

查看执行后的结果,如下图所示:

您可能感兴趣的文章:

  • Python爬虫信息输入及页面的切换方法
  • 一个简单的python爬虫程序
    爬取豆瓣热度Top100以内的电影信息
  • python爬虫爬取淘宝商品信息(selenum+phontomjs)
  • Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
  • 使用python爬虫实现网络股票信息爬取的demo
  • python爬虫_微信公众号推送信息爬取的实例
  • Python网络爬虫与信息提取(实例讲解)
  • Python爬虫实现网页信息抓取功能示例【URL与正则模块】
  • Python爬虫框架Scrapy实战之批量抓取招聘信息
  • 澳门威尼斯人赌场 ,python定向爬虫校园论坛帖子信息
  1. F12(开发者选项)
  2. Notework
  3. F5(刷新)
  4. feedRateList(文件名)
  5. Headers
  6. 复制Request URL
1. 获取商品列表
import pymongofrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom urllib.parse import quotefrom pyquery import PyQuery as pqdriver = webdriver.Chrome()wait = WebDriverWait(driver,10)KEYWORD = 'iMac'def index_page: print('正在爬取第',page,'页') try: url = 'https://s.taobao.com/search?q='+quote driver.get if page > 1: input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))) submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))) input.clear() input.send_keys submit.click() wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str wait.until( EC.presence_of_element_located(( By.CSS_SELECTOR,'.m-itemlist .items .item'))) get_products() except TimeoutException: index_page

通过构造查询参数,得到淘宝网的搜索URL,q后面接你要搜索的关键词。就能够跳转到搜索指定商品后的页面,也是程序的入口URL通过改变EYWORD的值,就能爬取不同商品信息;拼接URL的时候用到quote方法,屏蔽特殊字符串,如空格等,URL地址里是不含空格的,同时将字符串转换为URL编码格式,以保证URL的正确性。

下面代码等待加载时,使用了WebDriverWait对象,指定等待条件和10s的最长等待时间,如果在这个时间内页面元素成功加载出来了,就相应结果并继续向下执行,否则抛出超时异常。EC.presence_of_element_located是元素成功加载出来,EC.presence_of_element_located
意思是元素可以点击,因为它是一个按钮,这个按钮的作用是选定页码后的点击确定后跳转。

为了验证跳转到了对应的页码,需要判断当前高亮的页码数是当前的页码数(当前所在页码会高亮显示,也就是说当前页码的css是特殊的),所以这里使用了另一个等待条件text_to_be_present_in_element,它会等待指定的文本出现在某一个节点里面时即返回成功。这里我们将高亮的页码节点对应的CSS选择器和当前要跳转的页码通过参数传递给这个等待条件,这样它就会检测当前高亮的页码节点是不是我们传过来的页码数,如果是,就证明页面成功跳转到了这一页,页面跳转成功。

这样刚才实现的index_page()方法就可以传入对应的页码,待加载出对应页码的商品列表后,再去调用get_products()方法进行页面解析。

这些等待条件的参数都是特定的css选择器,不做赘述了,图片已经标注的很清楚了

威尼斯人棋牌游戏 7

然后去除不必要的字段,获取自己想要的内容

2.解析商品列表
def get_products(): html = driver.page_source doc = pq items = doc('#mainsrp-itemlist .items .item').items() for item in items: product = { 'image' : item.find('.pic .img').attr('data-src'), 'price' : item.find.text(), 'deal' : item.find('.deal-cnt').text(), 'title' : item.find.text(), 'shop': item.find.text(), 'location':item.find('.location').text() } print save_to_mongo print

通过driver.page_source
获得了不同页码下完整html源码;同时使用Pyqurey来解析网页,通过已经查找的标签,查找这个标签下的子标签或者父标签,而不用从头开始查找,效率更高;通过find.属性方法,获取图片URL,和其他文本信息并构造成Json字符串,调用save_to_mongo函数存入数据库中。

在这个案例中,采用PhantomJS。Selenium和PhantomJS的配合使用可以完全模拟用户在浏览器上的所有操作,包括输入框内容填写、单击、截屏、下滑等各种操作。这样,对于需要登录的网站,用户可以不需要通过构造表单或提交cookie信息来登录网站。

威尼斯人棋牌游戏 8

3.将结果保存到Mogodb中
def save_to_mongo: client = pymongo.MongoClient('mongodb://admin:admin123@localhost:27017/') db = client['taobao'] collection = db['products'] try: if collection.insert: print("成功保存到MongoDB") except Exception: print('someing wrong with MongDB')

python3通过认证方式连接Mongodb数据库,admin是我的用户名,admin123是我的密码,接着指定数据库和集合,调用insert方法插入数据。

二. 案例介绍

 

4.定义爬取页数
def main(): MAX_PAGE = 100 for i in range(1,MAX_PAGE+1): index_page driver.close()if __name__ =='__main__': main()

简单for循环,并通过range生成1到100的数传递给index_page函数。

这里所举的案例,是利用Selenium爬取淘宝商品信息,爬取的内容为淘宝网(

看看运行后的效果图

5.完整代码
import pymongofrom selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom urllib.parse import quotefrom pyquery import PyQuery as pqdriver = webdriver.Chrome()wait = WebDriverWait(driver,10)KEYWORD = 'iMac'def index_page: print('正在爬取第',page,'页') try: url = 'https://s.taobao.com/search?q='+quote driver.get if page > 1: input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))) submit = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))) input.clear() input.send_keys submit.click() wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str wait.until( EC.presence_of_element_located(( By.CSS_SELECTOR,'.m-itemlist .items .item'))) get_products() except TimeoutException: index_pagedef get_products(): html = driver.page_source doc = pq items = doc('#mainsrp-itemlist .items .item').items() for item in items: product = { 'image' : item.find('.pic .img').attr('data-src'), 'price' : item.find.text(), 'deal' : item.find('.deal-cnt').text(), 'title' : item.find.text(), 'shop': item.find.text(), 'location':item.find('.location').text() } print save_to_mongo printdef save_to_mongo: client = pymongo.MongoClient('mongodb://admin:admin123@localhost:27017/') db = client['taobao'] collection = db['products'] try: if collection.insert: print("成功保存到MongoDB") except Exception: print('someing wrong with MongDB') MAX_PAGE = 100def main(): for i in range(1,MAX_PAGE+1): index_page driver.close()if __name__ =='__main__': main() 

这段程序是对以前所学知识的综合利用,Mongodb是前几天现学现用,这是我第一次使用,关系型数据库Oracle,Sql
server,Mysql
都用过,基本知识也有掌握,非关系型数据库Mongodb以后可能会写几篇学习笔记

威尼斯人棋牌游戏 9

威尼斯人棋牌游戏 10

1,输出结果

威尼斯人棋牌游戏 11pic4

这里可以看到,在用户输入淘宝后,需要模拟输入,在输入框输入“男士短袖”。

 

2.查看mongodb中存入的数据

威尼斯人棋牌游戏 12pic5

案例中使用Selenium和PhantomJS,模拟电脑的搜索操作,输入商品名称进行搜索,如图所示,“检查”搜索框元素。

如果你想要进行简单数据分析的话,那可以把爬取下来的评论保存下来。

威尼斯人棋牌游戏 13

然后用Python对其进行数据分析,对于数据可视化小编比较推荐pyecharts

并且如下图所示,“检查”下一页元素:

它可以是这样的

威尼斯人棋牌游戏 14

威尼斯人棋牌游戏 15

爬取的内容有商品价格、付款人数、商品名称、商家名称和地址,如下图所示:

 

威尼斯人棋牌游戏 16

也可以是这样的

最后把爬取数据存储到MongoDB数据库中。

威尼斯人棋牌游戏 17

三. 相关技术

这里把除了selenium之外所需要的知识列一下,这里就不做详细解释了,如果不清楚的话可以百度了解下。

  • mongoDB的使用,以及在python中用mongodb进行数据存储。

  • lxml,爬虫三大方法之一,解析效率比较高,使用难度相比正则表达式要低(上一篇文章的解析方法是正则表达式)。

  • 间歇休息的方法:driver.implicitly_wait

四. 源代码

代码如下所示,可复制直接执行:

from selenium import webdriverfrom lxml import etreeimport timeimport pymongoclient = pymongo.MongoClient('localhost',  27017)mydb = client['mydb']taobao = mydb['taobao']driver = webdriver.PhantomJS()driver.maximize_window() def get_info:     page = page + 1     driver.get     driver.implicitly_wait(10)     selector = etree.HTML(driver.page_source)     infos = selector.xpath('//div[@]')     for info in infos:        data = info.xpath('div/div/a')[0]        goods =  data.xpath('string').strip()        price = info.xpath('div/div/div/strong/text()')[0]        sell =  info.xpath('div/div/div[@]/text()')[0]        shop =  info.xpath('div[2]/div[3]/div[1]/a/span[2]/text()')[0]        address =  info.xpath('div[2]/div[3]/div[2]/text()')[0]        commodity = {            'good':goods,            'price':price,            'sell':sell,            'shop':shop,            'address':address        }        taobao.insert_one(commodity)     if page <= 50:        NextPage     else:        passdef NextPage:     driver.get     driver.implicitly_wait(10)         driver.find_element_by_xpath('//a[@trace="srp_bottom_pagedown"]').click()     time.sleep(4)     driver.get(driver.current_url)     driver.implicitly_wait(10)     get_info(driver.current_url,page)if __name__ == '__main__':     page = 1     url = 'https://www.taobao.com/'     driver.get     driver.implicitly_wait(10)     driver.find_element_by_id('q').clear()     driver.find_element_by_id('q').send_keys('男士短袖')     driver.find_element_by_class_name('btn-search').click()     get_info(driver.current_url,page)

五. 代码解析

1~4行

导入程序需要的库,selenium库用于模拟请求和交互。lxml解析数据。pymongo是mongoDB
的交互库。

6~8行

打开mongoDB,进行存储准备。

10~11行

最大化PhantomJS窗口。

14~33行

利用lxml抓取网页数据,分别定位到所需要的信息,并把信息集成至json,存储至mongoDB。

35~47行

分页处理。

51~57行

利用selenium模拟输入“男士短袖”,并模拟点击操作,并获取到对应的页面信息,调取主方法解析。

———————————————————

公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。

威尼斯人棋牌游戏 18

相关文章