首页 首页 >  文章资讯

python爬虫 — 爬取淘宝商品信息

发布时间:2023-08-12 09:52:42 浏览次数:98次

(一)确定需要爬取的信息

在爬取前首先确定需要获取的信息,打开taobao,在搜索框中输入,需要获取的商品的信息,比如ipad,点击搜索

就可以看到许多的ipad,选择其中的一款商品,比如第一个

 

可以看到,其包含了以下的信息:

(1)price: 售价

(2)deal-cnt: 付款人数

(3)name: 产品名称

(4)shop_name: 店铺名称

(5)location: 店铺所在地

因此,我们可以爬取上面的这些信息,最后将结果存储在 数据库 mongo 中,最终的存储效果为:

接下来开始介绍整个的爬取流程

(二)爬取流程

1.网页特点分析

在商品页面右键查看源代码,会发现找不到需要的信息,便可以猜测其是通过ajax或者其他的方式来加载的。因此,采用selenium 和 pyquery 来爬取商品信息。

2.代码分析

2.1 导入相关的库

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait  
from pyquery import PyQuery as pq 
import pymongo
from urllib.parse import quote

2.2 进行必要的初始化

browser = webdriver.Firefox()   #初始化浏览器
wait = WebDriverWait(browser, 30)   #指定延时时间
client = pymongo.MongoClient(host= 'localhost', port=27017)
db = client['taobao']     #指定使用的数据库
collection = db['ipad']  #指定使用的集合

2.3获取网页

首先分析网页的特点,右键 — 查看元素,首先找到页面下方的切换网页的地方

其对应的源代码如下:

def page_get(page):print('正在爬取第',page,'页')try:url = "https://s.taobao.com/search?q=" + quote('ipad')browser.get(url)  #连接淘宝网in_put = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager .form>input'))) #输入框submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager .form>.btn')))    #提交按钮in_put.clear()     #清空输入信息, 每次都要in_put.send_keys(page)  #输入信息submit.click()     #点击提交按钮print('连接成功')item_info()        #调用信息提取页面except TimeoutException:page_get(page)

2.4获取商品信息

首先分析网页,发现商品的信息都存储在 id ="mainsrp-itemlist" 

<div id="mainsrp-itemlist"><div class="m-itemlist" data-spm="14">

其下面的 class = "items" 的每一个子节点 class = "item" 均代表一个商品,点开每个标签,即可看到详细信息

获取商品信息的代码如下:

def item_info():html = browser.page_source   #获取htmldoc  = pq(html)print("获取成功")items = doc('#mainsrp-itemlist .item').items()     #形成可迭代列表print('这一页商品的的个数是',len(doc('#mainsrp-itemlist .item')),'件')#遍历获取商品的信息for item in items:items_info = {'name': item.find('.row-2').text(),'price': item.find('.price>strong').text(),'deal-cnt' : item.find('.deal-cnt').text(),'shop_name': item.find('.row-3 a').text(),'location' : item.find('.row-3 .location').text(),}    #一件商品的信息提取完毕result_save(items_info)    #存储

2.5 存储

将最终的结果存储到 非关系型数据库 Mongo  中

def result_save(data):if collection.insert(data):print('保存成功')else:print("保存失败")

2.6主函数

def main():print("working")for page in range(1,101):   page_get(page)

2.7运行整个程序

if __name__ == '__main__':main()

 

2.8最终结果

 

最终爬取了4800条数据


【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息发邮件至 lnkj@3173.top ,我们将及时沟通与处理。 本站内容除了3117站长服务平台( www.3117.cn )原创外,其它均为网友转载内容,涉及言论、版权与本站无关。