Python批量导出阿里国际站竞品旺铺整站标题关键词

想知道阿里巴巴国际站竞争对手旺铺覆盖了哪些关键词,这个脚本可以帮你搞定,利用Python批量导出阿里巴巴国际站同行top旺铺整站标题和关键词。

如果你还没安装Python,查看安装教程:Windows10系统安装Python教程 和 Sublime下载及安装教程

#encoding=utf-8
import requests,re,time,random,pycurl,multiprocessing,json,csv
from io import BytesIO
'''用来存放关键词的csv文件'''
# op_csv=open('keyword.csv', 'wb')
# writer=csv.writer(op_csv)
'''旺铺地址格式如下'''
ali_campany_url='xxx.en.alibaba.com'
'''构造头部headers'''
headers=[
'authority:%s'%ali_campany_url,
'method:GET',
# 'path:/productlist-2.html?isGallery=Y',
'path:/productlist-2.html?spm=a2700.icbuShop.41413.80.3c8b6060hbe0mI'
'scheme:https',
'accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'accept-encoding:gzip, deflate, sdch, br',
'accept-language:zh-CN,zh;q=0.8',
# 'cookie:t=de2c15aaa52943b32f52047e5a99ca38; cna=GwWwEP55+xoCAXQVUP45eRCN; ali_apache_id=116.21.80.254.1479107002992.269078.3; xman_us_f=x_l=1; ali_beacon_id=116.21.80.254.1479107004102.167056.7; _ga=GA1.2.625111664.1480316413; _umdata=ED82BDCEC1AA6EB98C548550E8C44E0AE5F011C4983AF5532DF3387C1347EB9563BE680EE5DD1E6845CFE81BBEE63D88186BA677F30EB7AD6FF80CCC2BD4A3C798A6569850CD68BEB0973249799147735C5F1F0CC270D560F3C2D4966392052A; xman_f=vfBloadSAJR5D11GhbA21T8ukbUCuLph798C5cGdkR4CM6nJE5+SDIspmSWNAJjVpORPK888ZngYPtT+9acvoe9HNCphoIX0KhmARYzojiePaJr6eHAz7g==; history=product_selloffer%5E%0A60585412097%24%0A1821282900%24%0A60455100674; gangesweb-buckettest=116.21.80.254.1479107019387.1; ali_ab=116.21.80.254.1479107004134.0; ali_apache_track="mid=fastcleaner"; l=As/PHJMu9yY8YvH2zsyDpZ5032nZCiMW; isg=AtLSib8p3iaTwyK42wcgudK6I5jnytZ9bqvVYZwrAAVwr3KphHMmjdiPabxp
'upgrade-insecure-requests:1',
'user-agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
]
'''加入代理'''
daili_list=[]
def ip():
for x in open(r'F:\python\daili.txt'):
x = x.strip()
daili_list.append(x)
newip = random.choice(daili_list)
return newip
'''re.search提取所需数据'''
def search(re_url,html):
re_Data=re.search(re_url,html)
if re_Data:
return re_Data.group(1)
else:
return 'no'
'''获取html源码'''
def gethtml(url):
while 1:
try:
time.sleep(random.random())
# newip=requests.get('http://dynamic.goubanjia.com/dynamic/get/a22713abbfb1dbed02f1f51ddbfa4a1a.html?sep=3').text.strip()
# print (newip)
# newip=ip()          #代理
c = pycurl.Curl()   #通过curl方法构造一个对象
b = BytesIO()
c.setopt(pycurl.WRITEFUNCTION, b.write) #回调写入字符串缓存
c.setopt(c.URL, url)                    #设置要访问的URL
c.setopt(pycurl.FOLLOWLOCATION, True)   #自动进行跳转抓取
c.setopt(pycurl.MAXREDIRS,5)            #设置最多跳转多少次
c.setopt(pycurl.CONNECTTIMEOUT, 60)     #设置链接超时
c.setopt(pycurl.TIMEOUT,120)            #下载超时
c.setopt(pycurl.ENCODING, 'gzip,deflate')   #处理gzip内容,有些傻逼网站,就算你给的请求没有gzip,它还是会返回一个gzip压缩后的网页
# c.setopt(c.PROXY,newip)                 # 代理
c.setopt(pycurl.HTTPHEADER,headers)     #传入请求头
# c.setopt(pycurl.POST, 1)
# c.setopt(pycurl.POSTFIELDS, data)     #传入POST数据
c.setopt(pycurl.SSL_VERIFYPEER, 0)  
c.setopt(pycurl.SSL_VERIFYHOST, 0)  
# c.setopt(pycurl.HEADERFUNCTION, headerCookie)  
# c.setopt(pycurl.COOKIE,Cookie)
c.perform()
code = c.getinfo(c.RESPONSE_CODE)   #返回状态码
html = b.getvalue().decode()  #返回源代码
if '302 Found' in html or code != 200:
print (u'代理失效重试'),url
# print ('')
continue
else:
# print (html)
return html
except Exception as e:
print (e)
continue
'''主程序:获取标题和关键词'''
def getKeyword(url):
html=gethtml(url)
# print (html)
'''提取当前页面想要的url'''
re_url=re.compile(r'<a class="title-link icbu-link-normal" href="(/product/.*?html)" target="_blank" title=".*?">')
re_url=re.findall(re_url,html)
'''遍历url'''
for i in re_url:
'''构造url'''
url='http://'+'%s'%ali_campany_url+i.strip()
# print (url)
html=gethtml(url)
'''提取标题'''
re_title=re.compile(r' <h1 class="ma-title" title=.*?>(.*?)</h1>')
title=search(re_title,html).strip()
# print (title)
'''提取关键词'''
# re_word=re.compile(r'<li><a href="http://www\.alibaba\.com/showroom/.*?html" class="qrPRskw">(.*?)</a></li>')
re_word=re.compile(r'"productKeywords":{"name":"productKeywords","value":"(.*?)",')
keyword=search(re_word,html).strip()
# print (keyword)
ott=keyword.split(',')
ott.insert(0,title)
print (ott)
with open("keyword.csv","a+") as csvfile: 
writer = csv.writer(csvfile)
#先写入columns_name
writer.writerow(ott)
#写入多行用writerows
# writer.writerows([[0,1,3],[1,2,3],[2,3,4]])
'''拼接列表页的url,并存放到urls这个列表里'''
urls = []
for i in list(range(1,124)):
'''旺铺翻页url构造'''
url='https://xxx.en.alibaba.com/productgrouplist-801839748-%d/IPL_Laser.html?spm=a2700.icbuShop.41413.45.571359e8VD0AmR&filter=null'%i
urls.append(url)
# getKeyword(url)
'''多进程开始'''
if __name__ == '__main__':
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for url in urls: #从urls这个列表遍历单条url
pool.apply_async(getKeyword, (url, ))  #传入到主程序def getKeyword(url)
time.sleep(0.3)
pool.close()
pool.join()

教程来源于:杨百辉博客

小朱笔记

View posts by 小朱笔记
小朱个人博客,生活网络分享,外贸建站,谷歌seo操作分享,B2B优化排名操作分享,资源分享,软件分享,生活分享。https://www.zhudc.com/

6 Comments

  1. 头像
    文件2020年3月13日

    F:\python\daili.txt 这个是什么文件

    回复
    1. 头像
      小朱笔记2020年3月16日

      代理

      回复
  2. 头像
    李四2019年12月26日

    上面的代码应该导成什么样的文件格式来运行?

    回复
    1. 头像
      小朱博客2019年12月26日

      PY格式

      回复
  3. 头像
    Hailey2019年12月20日

    你好,我按照教程安装了,也把代码复制上去并且替换了店铺链接,然后Ctrl+B 运行之后没有得到导出的文件,是不是还有些地方我没提前设置好?

    回复
    1. 头像
      小朱博客2019年12月20日

      这个要具体分析原因

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Scroll to top