python获取阿里巴巴国际站商家信息

帮一个做外贸的朋友搞的,他需要电话号去和商家沟通,提供国际货运一条龙服务,不停地切换页面查看手机号,比较麻烦,帮他写个脚本,一次性获取下来,存成Excel。现在分享一下过程,同时记录一下他欠我一顿饭。

前言

阿里巴巴国际站上的商家号码在不同的商家页面上,如图所示,需要登录授权才能查看。
在这里插入图片描述
本来想直接通过接口去获取,但是发现每次请求都有一个动态的spm参数不同的变动,所以决定简单一点用selenium启一个webdriver,效率比较慢。

1.启动webdriver,并完成登录

from selenium.webdriver import ChromeOptions
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import re
import time
from lxml import etree
import csv# 完成登录 登陆
class Chrome_drive():def __init__(self):option = ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)NoImage = {"profile.managed_default_content_settings.images": 2}  # 控制 没有图片option.add_experimental_option("prefs", NoImage)# option.add_argument(f'user-agent={ua.chrome}')  # 增加浏览器头部# chrome_options.add_argument(f"--proxy-server=http://{self.ip}")  # 增加IP地址。。# option.add_argument('--headless')  #无头模式 不弹出浏览器self.browser = webdriver.Chrome(executable_path="./chromedriver", options=option)self.browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'})  #去掉selenium的驱动设置self.browser.set_window_size(1200,768)self.wait = WebDriverWait(self.browser, 12)def get_login(self):url='https://passport.alibaba.com/icbu_login.htm'self.browser.get(url)#self.browser.maximize_window()  # 在这里登陆的中国大陆的邮编#这里进行人工登陆。k = input("输入1")if 'Your Alibaba.com account is temporarily unavailable' in self.browser.page_source:self.browser.close()while k == 1:breakself.browser.refresh()  # 刷新方法 refresreturn

为了快速加载web页面,浏览器设置不加载图片,打开登录页后死循环等待,手动登录完成后,控制台输入1 跳出循环。

2.获取页面内容

分析网页
在这里插入图片描述
在这里插入图片描述

我们首先获取页面上class=item-main的dom,可以拿到商家信息,然后获取dom下class=cd的a标签的src属性可以获取商家详细信息页面链接,获取信息后存成csv文件。代码实现如下:

#获取判断网页文本的内容:def index_page(self,page,wd):"""抓取索引页:param page: 页码"""print('正在爬取第', page, '页')url = f'https://www.alibaba.com/trade/search?page={page}&keyword={wd}&f1=y&indexArea=company_en&viewType=L&n=38'js1 = f" window.open('{url}')"  # 执行打开新的标签页print(url)self.browser.execute_script(js1)  # 打开新的网页标签# 执行打开新一个标签页。self.browser.switch_to.window(self.browser.window_handles[-1])  # 此行代码用来定位当前页面窗口self.buffer()  # 网页滑动  成功切换#等待元素加载出来time.sleep(3)self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#J-items-content')))#获取网页的源代码html =  self.browser.page_sourceself.get_products(wd,html)self.close_window()def get_products(self, wd, html_text):"""提取商品数据"""e = etree.HTML(html_text)item_main = e.xpath('//div[@id="J-items-content"]//div[@class="item-main"]')items = e.xpath('//div[@id="J-items-content"]//div[@class="item-main"]')print('公司数 ', len(items))for li in items:company_name = ''.join(li.xpath('./div[@class="top"]//h2[@class="title ellipsis"]/a/text()'))  # 公司名称company_phone_page = ''.join(li.xpath('./div[@class="top"]//a[@class="cd"]/@href'))  # 公司电话连接product = ''.join(li.xpath('.//div[@class="value ellipsis ph"]/text()'))  # 主要产品Attrs = li.xpath('.//div[@class="attrs"]//span[@class="ellipsis search"]/text()')length = len(Attrs)counctry = ''total_evenue = ''sell_adress = ''product_img = ''if length > 0:counctry = ''.join(Attrs[0])  # 国家if length > 1:total_evenue = ''.join(Attrs[1])  # Total 收入if length > 2:sell_adress = ''.join(Attrs[2])  # 主要销售地if length > 3:sell_adress += '、' + ''.join(Attrs[3])  # 主要销售地if length > 4:sell_adress += '、' + ''.join(Attrs[4])  # 主要销售地product_img_list = li.xpath('.//div[@class="product"]/div/a/img/@src')if len(product_img_list) > 0:product_img = ','.join(product_img_list)  # 产品图片self.browser.get(company_phone_page)phone = ''address = ''mobilePhone = ''try:if 'Your Alibaba.com account is temporarily unavailable' in self.browser.page_source:self.browser.close()self.browser.find_element_by_xpath('//div[@class="sens-mask"]/a').click()phone = ''.join(re.findall('Telephone:</th><td>(.*?)</td>', self.browser.page_source, re.S))mobilePhone = ''.join(re.findall('Mobile Phone:</th><td>(.*?)</td>', self.browser.page_source, re.S))address = ''.join(re.findall('Address:</th><td>(.*?)</td>', self.browser.page_source, re.S))except:print("该公司没有电话")all_down = [wd, company_name, company_phone_page, product, counctry, phone, mobilePhone, address,total_evenue, sell_adress, product_img]save_csv(all_down)print(company_name, company_phone_page, product, counctry, phone, mobilePhone, address, total_evenue,sell_adress, product_img)

注意:国际站列表图片是懒加载的,也就是说没有滑动出来的时候产品图片地址是空的,我们增加一个窗口滑动操作和一个关闭标签页的动作

	def buffer(self): #滑动网页的for i in range(33):time.sleep(0.5)self.browser.execute_script('window.scrollBy(0,380)', '')  # 向下滑行300像素。def close_window(self):length=self.browser.window_handlesif  len(length) > 3:self.browser.switch_to.window(self.browser.window_handles[1])self.browser.close()time.sleep(1)self.browser.switch_to.window(self.browser.window_handles[-1])

获取信息如下在这里插入图片描述
然后是main方法,这里我省事了,就是先搜了一下关键词之后,看了下一共多少页,写了个for循环,有时间可以修改成获取列表的总页数,自动循环:

def save_csv(lise_line):file = csv.writer(open("./alibaba_com_img.csv", 'a', newline="", encoding="utf-8"))file.writerow(lise_line)def main():"""遍历每一页"""run = Chrome_drive()run.get_login() #先登录wd ='henan'for i in range(1,32):run.index_page(i, wd)if __name__ == '__main__':csv_title = 'wd,company_name,company_phone_page,product,counctry,phone,mobilePhone,address,total_evenue,sell_adress,product_img'.split(',')save_csv(csv_title)main()

3.获取产品图片

第二步执行完,我们就获取关键词搜索后的全部商家信息,这一步我们把商家的产品图片全部下载下来,代码如下:

# -*- coding: utf-8 -*-import requests
import pandas as pd
def open_requests(img, img_name):img_url ='https:'+ imgres=requests.get(img_url)with open(f"./downloads_picture/{img_name}", 'wb') as fn:fn.write(res.content)df1=pd.read_csv('./alibaba_com_img.csv',)
for imgs in df1["product_img"]:imgList = str(imgs).split(',')if len(imgList) > 0:img = imgList[0]img_name = img[24:]print(img, img_name)open_requests(img, img_name)

在这里插入图片描述

4.获取插入图片

刚才保存的是一个csv文件,我们把csv转成Excel,注意csv转成Excel时不要直接用文件转换,容易有乱码问题,我们选择数据导入方式转换。
选择菜单栏选择文件,然后选择导入,菜单选择csv文件然后点导入
在这里插入图片描述
选择文件原始格式:UTF-8,然后点下一步
在这里插入图片描述

间隔符选择逗号和制表符。
在这里插入图片描述
把列数据格式全部输入成文本,不然电话号会自动转成16进制。。
在这里插入图片描述
导入成功后,我们选择C列然后插入一列,准备插入图片。
在这里插入图片描述
插入第三步下载好的图片,代码如下:

# -*- coding: utf-8 -*-from PIL import Image
import os
import xlwings as xw
path='alibaba_com.xlsx'
app = xw.App(visible=True, add_book=False)
wb = app.books.open(path)sht = wb.sheets['Sheet1']
img_list=sht.range("L2").expand('down').value
print(len(img_list))def write_pic(cell,img_name):path=f'./downloads_picture/{img_name}'print(path)fileName = os.path.join(os.getcwd(), path)img = Image.open(path).convert("RGB")print(img.size)w, h = img.sizex_s = 70  # 设置宽 excel中,我设置了200x200的格式y_s = h * x_s / w  #  等比例设置高sht.pictures.add(fileName, left=sht.range(cell).left, top=sht.range(cell).top, width=x_s, height=y_s)if __name__ == '__main__':for index,imgs in enumerate(img_list):cell="C"+str(index + 2)imgsList = str(imgs).split(',')if len(imgsList) > 0:img = imgsList[0]img_name = img[24:]try:write_pic(cell,img_name)print(cell,img_name)except:print("没有找到这个img_name的图片",img_name)wb.save()wb.close()app.quit()

最终效果如下:
在这里插入图片描述

项目地址如下:https://github.com/FORMAT-qi/alibababBsinessInfo

欢迎关注,欢迎点赞,如有帮助,请给我github一个star,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39533.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里巴巴国际站业务如何写出高效便捷的客户开发跟进邮件?

阿里巴巴国际站客户开发商务邮件该如何写&#xff1f;&#xff1f; 以下是我个人的一些小经验&#xff0c;希望对大家有所帮助。 对于有知识基础的外贸业务同学&#xff0c;特别是大学就是这方向的专业的同学&#xff0c;如果不是有其他的明确方向&#xff0c;我建议是可以看看…

阿里巴巴国际站组合标题的小技巧

首先按照我之前说的&#xff0c;通过引流关键词or关键词指数下载到平台上的关键词&#xff0c;然后得到Excel&#xff0c;那么现在打开&#xff0c;随便以bags为例&#xff0c;下载得到的词表里面是按照热度排列的&#xff0c; 词的长短不一&#xff0c;不方便我们组合标题&…

业界标杆,直达P8,阿里巴巴面试参考指南(2022泰山版)发布

阿里巴巴面试参考指南&#xff08;2022泰山版&#xff09; 全篇共计分为以下七个部分&#xff1a; 阿里巴巴&#xff1a;设计模式与最佳实践阿里巴巴&#xff1a;高并发编程阿里巴巴&#xff1a;数据库阿里巴巴&#xff1a;分布式阿里巴巴&#xff1a;中间件阿里巴巴&#xff…

阿里巴巴中国站获得店铺详情 API 返回值说明

请求地址: https://api-gw.onebound.cn/1688/seller_info 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_sea…

阿里巴巴国际站如何查看优秀同行产品关键词方法?

阿里巴巴国际站如何查看优秀同行产品关键词方法&#xff1f; 最近事情有点多&#xff0c;所以一直没来更新文章&#xff0c;希望忙过这段时间能有更多时间来写文章和大家分享。 自从我在之前的文章 2021阿里巴巴国际站产品关键词来源&#xff08;一&#xff09;中提到阿里国际…

阿里巴巴国际站关键词的收集

hi&#xff0c;4月份快要过去&#xff0c;大家的数据有涨吗&#xff1f; 最近的自然点击和自然曝光已经快追上TOP了&#xff0c;询盘TM也有增长在稳步上升。 说回正题&#xff0c;如何找到应对自己产品的关键词&#xff1f; 你要的都在数据管家-关键词指数里。搜索自家产品&a…

阿里巴巴国际站平台上,大家最容易忽视的问题!

01.产品成长管理&#xff0c;优化分数到达实力优品 大家平台上有挺多76-78&#xff0c;甚至79分数的产品&#xff0c;只要稍微优化下上面提示的指标即可。但很多人是没有去做的&#xff0c;因为很多是老产品&#xff0c;而实力优品的考核&#xff0c;一些新指标出现&#xff0…

阿里巴巴国际站产品标题的组合和优化方法一览

发产品这件事情上&#xff0c;到底什么问题最困扰你&#xff1f;答案肯定是&#xff1a;关键词和产品标题&#xff01; 无论是刚入门的运营小白还是操作多年的大神&#xff0c;每天要做的事情就是发产品&#xff0c;那在发产品这件事情上&#xff0c;到底什么问题最困扰你&…

阿里巴巴国际站之关键词整理

这是我在知乎上看到的关于阿里巴巴国际站关键词收集整理的文章。现转载过来和大家分享&#xff0c;我觉得这位运营很实在&#xff0c;这也是我喜欢他的文章的原因。 今天和大家讲讲关键词的收集&#xff0c;想跳出的朋友先别着急&#xff0c;请耐心看下去。 说到关键词来源&a…

阿里巴巴国际站—产品运营工作台操作指南

阿里巴巴国际站—产品运营工作台操作指南 这个标题有点夸大了&#xff0c;没办法&#xff0c;感觉现在不把事情说的大点&#xff0c;牛X点的话根本没人看&#xff0c;这样的例子大家应该都遇到过&#xff0c;标题说的是一回事&#xff0c;确实吸引了你&#xff0c;但点开之后发…

纯干货版阿里巴巴国际站入门攻略

阿里巴巴国际站作为目前全球排名名列前茅的B2B电商平台&#xff0c;很多跨境电商卖家都很想入局。但是目前很多公司的国际站都没有专职运营的人员&#xff0c;只是靠外贸业务员操作&#xff0c;所以涉猎的都是比较浅的东西。今天龙哥就来讲讲如果想要深研这个平台的话&#xff…

阿里巴巴国际站询盘是什么意思?如何提高询盘率

阿里巴巴国际站询盘是什么意思&#xff1f; 目录 阿里巴巴国际站询盘是什么意思&#xff1f; 询盘一般分为两种&#xff1a; 阿里巴巴国际站询盘有什么技巧吗&#xff1f; 阿里巴巴国际站询盘是什么意思&#xff1f; 询盘&#xff08;inquiry&#xff09;也叫询价&#xff…

【考研政治】时政(思维导图)

【考研政治】时政&#xff08;思维导图&#xff09; 前言 写一下时政的笔记。 时政的内容其实包括形势与政策以及当代世界经济与政治。其中形势与政策每年有变化&#xff0c;当代世界经济与政治没有变化。 我先写一下当代政治与经济的内容。 文章目录 【考研政治】时政&…

考研政治分析题万能答题模板!

考研政治的考试中&#xff0c;经常会遇到自己从没见过的分析题&#xff0c;很多人面对这些问题时都感觉无从下手。今天整理了考研政治分析题万能答题模板&#xff0c;希望对大家有所帮助。 举个例子&#xff0c;请说明运动和物质的关系&#xff1a;任何题先从定义和概念说起是觉…

【考研加油】所有上岸的考研人都有一个共同的特点,就是他们都参加考试了。2023考研加油。

声明:为 2023考研的朋友加油! 2023考研加油 今明两天,将是大部分2023考研人,真正“上战场”的时候。 我想,只有经历过的人,才能对这一历程,感同身受吧! 为你们加油! 以下是在QQ空间看到的一组图,与你们共勉。 距考研还有____天! 确定目标院校中…跨考又能如何?…

最新!考研统考阅卷结束!这些试卷易被压分!

不少高校都规定阅卷老师需要在春节前将试卷批改完成。因此&#xff0c;近期有不少招生单位称阅卷已结束&#xff01; 1 官宣&#xff1a;统考阅卷结束 &#xff08;1&#xff09; 官宣阅卷结束 四川教育考试院 四川教育考试院发文称&#xff1a;2023年全国硕士研究生招生考试统…

【考研政治】思维导图及笔记

文章目录 1. 资源链接2. 分值分布3. 玄学技巧3.1 keyword3.2 分析题3.2 猜猜法 4. 思维导图4.1 马原4.2 思修4.3 史纲4.4 毛中特 1. 资源链接 此网盘包含xmind源文件、pdf导出文件、png图片。 使用源文件可以在上面增删改查、也可以修改样式。 考研政治思维导图 (访问密码: 699…

【历年真题】栏目来了,政治最后冲刺攻略,过线真不难

很多人都说政治是一门“低投入高回报”的科目&#xff0c;但这低投入并不是说考前看看书就可以了&#xff0c;想要得高分&#xff0c;有技巧。距离初试还有十多天&#xff0c;想要政治不拖后腿&#xff0c;时间来得及&#xff01; 很多同学对于政治后期的复习规划不是很清楚&a…

【2021考研】政治做题策略

【2021考研】政治做题策略 前言 回顾了一下考研政治的马克思、毛中特、史纲、思修、时政的内容&#xff0c;现在借助2021考试大纲以及往年考试试题猜测一下最优的做题策略。 越来越发现学习就像编程序。学一门课程就是编一个程序&#xff0c;遇到什么问题就是&#xff1a;输入…

爬取需要登录的网站数据

爬去某大学某学生的课程表 先查看该网站的request方法和数据表单 request方法是get 表单头为u和p import urllib.request import http.cookiejar import urllib.parse from urllib.request import urlopenurl"https://gsdb.bjtu.edu.cn/client/login/" agentMozil…