美文网首页
读取亚马逊购物车并自动查重

读取亚马逊购物车并自动查重

作者: libdream | 来源:发表于2018-12-27 15:24 被阅读0次

作为一个几乎经常要买买买的馆员,每次看到一大堆购物车里的图书,然后要一本本查重,总是觉得很心累啊。今天总算想通了,花点时间弄个自动查重的程序吧,这样也能解放自己了。

原理很简单,主要就是依靠爬虫,先爬取购物车里的图书,只要书名和ISBN两个字段就可以了,然后再通过OPAC查重就可以了。

首先要做的自然是导入库啦

import requests
from bs4 import BeautifulSoup
import time
import re

要爬购物车的图书,自然要先登录才行,这里我小偷懒一下,不弄自动登录那种了,太麻烦了。直接传入cookie就行了。
在浏览器登录账号,按F12进入检查,把cookie信息拷出来,命名为cookie.txt保存本地。


拷贝cookie到本地txt.png

再通过一段代码读取到py文件中。

with open('cookies.txt','r') as file:
    cookie = file.read()

这样就可以构建请求头啦。

headers = {
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding':'gzip, deflate, br',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Host':'www.amazon.cn',
    'Cookie':cookie,
    'X-Requested-With':'XMLHttpRequest'
    }

下面就可以爬取购物车里的图书了。

先获取购物车里图书链接

直接上代码

def getItemUrl(url):
    #从购物车中获取商品的url
    items_url = []
    r = requests.get(url,headers=headers)
    soup = BeautifulSoup(r.text,'lxml')
    url_infos = soup.find_all('span',class_="a-size-medium sc-product-title a-text-bold")
    for url_info in url_infos:
        item_url = 'https://www.amazon.cn' + url_info.parent['href']  #找到父节点的href属性
        items_url.append(item_url)

    return items_url

获取链接很简单,浏览器按F12,我是findall找到class="a-size-medium sc-product-title a-text-bold"的<span>标签,然后再找<span>的父节点就是我们要爬取的<a>标签了,也可以从上往下一层层爬下来,但是标签嵌套太多,太复杂了。
爬取的url是相对路径,还需要加上亚马逊的域名才成。

有了图书的url接下来就是爬取图书信息了

还是上代码

def getInfo(url):
    #获取商品的信息
    items_url = getItemUrl(url)
    for url in items_url:
        time.sleep(2)
        r = requests.get(url,headers=headers)
        soup = BeautifulSoup(r.text, 'lxml')
        #获取书名和isbn
        name = soup.find(id="productTitle").get_text()  #书名
        isbns = re.findall('<li><b>ISBN:</b>(.*?)</li>',r.text,re.S)[0].strip() #isbn

        #ISBN号多于2个的,只取13位的那个isbn
        if len(isbns) > 13:
            isbn_list = isbns.split(',')
            for isbn_n in isbn_list:
                isbn_n = isbn_n.strip() #删除左右空白
                if len(isbn_n) == 13:
                    isbn = isbn_n
                else:
                    pass
        else:
            isbn = isbns

书名很容易就能找到,ISBN稍微有点麻烦,有的ISBN13位和10位的同时存在,所以需要把他们分开,然后取用13位的那个。

再来就是查重啦,激动,终于要解放了

代码接上面的,放在getInfo()函数里

        #ISBN查重   
        lib_url = 'http://192.168.1.9:8080/opac/openlink.php?strSearchType=isbn&strText={}'.format(isbn)
        r = requests.get(lib_url)
        try:
            result = re.findall('本馆没有您检索的图书',r.text)
            if result:
                print('{} - 本馆未检索该图书'.format(name))
            else:
                result = re.findall('<p style="font-size:14px;">检索到 <strong class="red">(.*?)</strong> 条',r.text)[0]
                print('{} - 检索到{}条结果'.format(name, result))
        except Exception as e:
            print(e)

查重很简单,找两本书,一本馆藏有的,一本馆藏没有,分别搜索看出来的页面是什么样子的,馆藏有的会出来类似这样的“检索到 1 条 ISBN/ISSN=978-7-302-51145-8 的结果”文字,没有检索到的会出现“本馆没有您检索的图书”,所以很好判断,我是通过正则来判断的,很方便。


馆藏有.png 馆藏没有.png

最后展示下成果吧!


查重结果.png

相关文章

网友评论

      本文标题:读取亚马逊购物车并自动查重

      本文链接:https://www.haomeiwen.com/subject/qnirlqtx.html