爬取动态网站阿里巴巴(1688)商家公司名称及联系方式

news/2024/5/20 15:30:49/文章来源:https://blog.csdn.net/WSRY_GJP/article/details/105615698

爬取动态网站阿里巴巴(1688)商家信息

文章目录

      • 爬取动态网站阿里巴巴(1688)商家信息
        • (一)爬虫需求:
          • 1.目标网站:[阿里巴巴](https://s.1688.com/)
          • 2. 爬取阿里巴巴网站上供应商的商家的联系电话
          • 3.爬虫难点
        • (二)爬虫思路解析,攻克反爬障碍!
          • 2.1 攻克淘宝的验证登录

(一)爬虫需求:

1.目标网站:阿里巴巴
2. 爬取阿里巴巴网站上供应商的商家的联系电话

公司名称在输入关键词后就会以列表的形式展现处理出来
在这里插入图片描述
联系方式在公司的详情页之中
在这里插入图片描述

3.爬虫难点
  1. 难点一:在对阿里巴巴网站发起请求时,会被反爬虫辨认出来,必须登录了才能继续操作,公司联系方式等敏感内容必须登录淘宝账号才能进行爬取,所以首先能够顺利的登录上淘宝账号,可以考虑selenium模块自动化操作登录上淘宝账号
    在这里插入图片描述

  2. 难道二:需要输入关键词,设置搜索的地区,以及阿里巴巴商品详情页是动态加载出来的,不是常规的静态网页
    在这里插入图片描述

  3. 难点三:即使成功使用selenium成功模拟以上的动作,发现在对商家型爱情也发起请求时依然会跳出淘宝验证模块,大家可以思考一下是为什么?

(二)爬虫思路解析,攻克反爬障碍!

2.1 攻克淘宝的验证登录

淘宝的验证登录是反爬机制中最关键的一关,既然我只要发起请求就让我验证登录,那我先登录上去网站,看你还让我登录个锤子?
敲了半天代码,使用selenium模块 ,成功让浏览器自动填入账户密码,也能顺利滑动验证滑块,可是…,操作的时候发现,淘宝机制依然能发现,亲测 我多次尝试手动滑块都无法通过验证。
那就换种思路,扫码登录,果然,扫码登录的时候一次登录成功,下面贡献扫码登录代码:

import random
from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver import ActionChains
from time import sleep
from lxml import html
import requests
import re
import timeetree = html.etree
header = {"user-agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0",'Connection': 'close',"Accept-Encoding": "Gzip",
}def get_proxy_ip_list(type=1):# 从快代理购买代理ipapi_url = "https://dps.kdlapi.com/api/getdps/?orderid=980281118570139&num=20&pt=1&format=json&sep=1"api_url2 = "https://dps.kdlapi.com/api/getdps/?orderid=980281118570139&num=5&pt=1&format=json&sep=1"if type == 1:proxy_ip = requests.get(api_url).json()['data']['proxy_list']else:proxy_ip = requests.get(api_url2).json()['data']['proxy_list']return proxy_ipdef auto_login(area, keyword, url):""":param area::param keyword::param url::return:扫码登陆阿里巴巴账号"""province = area['province']page = area['page']option = ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])driver = webdriver.Chrome(executable_path=r'/Users/guojianpeng/Downloads/1688爬虫/chromedriver', options=option)driver.get(url)driver.implicitly_wait(10)sleep(1)driver.find_element_by_xpath('//*[@id="alibar"]/div[1]/div[2]/ul/li[3]/a').click()driver.implicitly_wait(20)driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="loginchina"]/iframe'))sleep(1)# 选择扫码登录,可以拿手机直接扫selenium打开的网站 等待时间8秒,2秒后刷新网站,等待三秒等网站刷新driver.find_element_by_xpath('//div[@id="login"]/div[1]/i').click()sleep(8)driver.refresh()driver.implicitly_wait(10)sleep(2)# 选择搜索关键词driver.find_element_by_xpath('//*[@id="home-header-searchbox"]').send_keys(keyword)driver.find_element_by_xpath("//div[@class='alisearch-action']/button").click()sleep(2)driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 选择供应商driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[2]/div/div[3]/div[1]/div/span[3]/a/span').click()sleep(2)print('------------------%s%s资料开始爬取------------------' % province)# area = driver.find_element_by_xpath("//*[@id='sw_mod_filter_area']")area = driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[6]/div[2]/div[1]')ActionChains(driver).move_to_element(area).perform()# province_button = driver.find_element_by_link_text(province)# ActionChains(driver).move_to_element(province_button).perform()# driver.find_element_by_link_text(city).click()# 阿里巴巴前端更新 这个是城市选择湖北driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[6]/div[2]/div[2]/ul[2]/li[16]').click()driver.implicitly_wait(10)sleep(1)count = 1# driver.find_element_by_xpath('//*[@id="jumpto"]').send_keys(count)# sleep(0.5)# driver.find_element_by_xpath('//*[@id="jump-sub"]').click()# driver.implicitly_wait(10)start_time = time.time()proxy_ip = get_proxy_ip_list(type=1)while count <= page:print('------------正在爬取%s第%s页数据------------' % count)count += 1driver.execute_script('window.scrollTo({ top: document.body.scrollHeight, behavior: "smooth" });')driver.implicitly_wait(10)page_text = driver.page_sourcesleep(random.uniform(2.1, 5.0))executor = ThreadPoolExecutor(5)urls_list = prase_urls(page_text)c = driver.get_cookies()cookies = {}# 获取cookie中的name和value,转化成requests可以使用的形式for cookie in c:cookies[cookie['name']] = cookie['value']for detail_url in urls_list:executor.submit(get_page, detail_url, cookies, proxy_ip).add_done_callback(parase_info)executor.shutdown(wait=True)if page > 1:driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[8]/div/div/div/span[2]/input').clear()driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[8]/div/div/div/span[2]/input').send_keys(count)sleep(0.5)driver.find_element_by_xpath('//*[@id="render-engine-page-container"]/div/div[8]/div/div/div/span[3]/button').click()driver.refresh()end_time = time.time()# 每六十秒向代理池加入新的ipif end_time - start_time > 60:proxy_ip += get_proxy_ip_list(type=2)else:print('------------%s资料已爬取完毕------------')print('-------------------------------------------')print('------------------所有资料已爬取完毕------------------')def prase_urls(page_text):"""解析每个页面的url,获取每个商家的网址地址,返回商家url列表:param page_text::return:"""tree = etree.HTML(page_text)url_list = tree.xpath('//*[@id="render-engine-page-container"]/div/div[7]/div[3]/div/div/div/div[1]/div/div[1]/a/@href')print(url_list, len(url_list))return url_listdef get_page(start_url, cookies, proxy_ip):"""请求商家联系方式的详情页,并返回html数据:param start_url::param cookies::param proxy_ip::return:"""ip = random.choice(proxy_ip)try:response = requests.get(url=start_url + '/page/contactinfo.htm', headers=header,proxies={"http": ip}, cookies=cookies).textsleep(random.randint(1, 3))except Exception as e:response = ' 'return {'url': url, 'text': response}def parase_info(result):"""解析商家联系方式等详细信息"""res = result.result()page_text = res.get('text')try:if page_text:tree = etree.HTML(page_text)company_name = tree.xpath('//*[@id="site_content"]/div[1]/div/div/div/div[2]/div/div[1]/div[1]/h4/text()')company_member_name = tree.xpath('//*[@id="site_content"]/div[1]/div/div/div/div[2]/div/div[1]/div[''1]/dl/dd//text()')compang_phone = tree.xpath('//*[@id="site_content"]/div[1]/div/div/div/div[2]/div/div[1]/div[2]/div[2]/dl[1]/dd/text()')compang_mobilephone = tree.xpath('//*[@id="site_content"]/div[1]/div/div/div/div[2]/div/div[1]/div[2]/div[''2]/dl[2]/dd/text()')year = tree.xpath('//*[@id="site_content"]/div[2]/div[1]/div/div[2]/div/div/div[2]/div[1]/div[2]/span[''1]/a/span/span/text()|//*[@id="site_content"]/div[2]/div/div/div[2]/div/div/div[''1]/div[1]/div[2]/a/span/text()')if len(company_name) > 0:company_name = company_name[0]company_member_name = company_member_name[1] + ''.join(company_member_name[2].split())# year = year[0]rule = re.compile(r'^\d')if len(compang_mobilephone) > 0:compang_mobilephone = compang_mobilephone[0].strip(' ').strip('\n')if rule.match(compang_mobilephone[0:1]) is None:compang_mobilephone = ''else:compang_mobilephone = ''if len(compang_phone) > 0:compang_phone = compang_phone[0].strip(' ').strip('\n')if rule.match(compang_phone[0:1]) is None:compang_phone = ''else:compang_phone = ''if len(compang_mobilephone) > 0 or len(compang_phone) > 0:# print('%s|%s|%s|%s|%s' % (#     company_name, company_member_name, compang_mobilephone, compang_phone, year[0]))with open('%s.txt' % keyword, 'a', encoding='utf-8') as f:f.write('%s|%s|%s|%s|%s\n' % (company_name, company_member_name, compang_mobilephone, compang_phone, year[0]))print('%s|%s|%s|%s|%s' % (company_name, company_member_name, compang_mobilephone, compang_phone, year[0]))except Exception as e:print(e)# 搜索关键词
keyword = '四件套'
# 搜索省份 城市
area = {'province': '湖北', 'page': 19}
url = 'https://www.1688.com/'
auto_login(area, keyword, url)

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

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

相关文章

java处理高并发高负载类网站的优化方法

java处理高并发高负载类网站的优化方法 转&#xff1a;http://blog.csdn.net/dengsilinming/article/details/9117735一&#xff1a;高并发高负载类网站关注点之数据库没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用&#xff0c;数据库的响应是首先要解…

使用Xcache缓存器加速你的PHP网站

由于国内网站备案比较麻烦&#xff0c;所以笔者便把网站放到了香港。虽然网站免去了备案的困扰&#xff0c;但是从访问速度上来看&#xff0c;一般要比放于国内的网站慢2-3倍&#xff0c;所以便想办法对网站做了一些简单的优化&#xff0c;比如使用缓存系统来提升网站页面访问速…

大型网站架构演变和知识体系

1、架构演变第一步&#xff1a;物理分离webserver和数据库 2、架构演变第二步&#xff1a;增加页面缓存 如用squid做页面缓存&#xff0c;或生产静态页面&#xff0c;不使用jsp 3、架构演变第三步&#xff1a;增加页面片段缓存 页面缓存失效情况比较多&#xff0c;因此可以使…

网站页面性能优化的35条黄金守则

1. Make fewer HTTP requests 尽可能少的http请求。。我们有141个请求&#xff08;其中15个JS请求&#xff0c;3个CSS请求&#xff0c;47个CSS background images请求&#xff09;&#xff0c;多的可怕。思考了下&#xff0c;为什么把这个三种请求过多列为对页面加载的重要不利…

web服务器添加网站win8,Win8系统配置局域网web服务器的方法

在win8系统中&#xff0c;我们可以通过配置web服务器来将信息实现互通&#xff0c;可以放置网页让局域网内浏览等&#xff0c;那么在win8系统中要怎么配置配置局域网web服务器呢&#xff1f;下文给大家分享一下Win8系统配置局域网web服务器的方法。1、首先在win8系统中打开电脑…

如何用合作的态度来提升网站收录与排名?

合作共赢&#xff0c;这个词被应用到各行各业是不无道理的&#xff0c;在SEO行业里同样如此。 在多年前&#xff0c;那是SEO飞速发展的时代&#xff0c;我们见证了许许多多的SEO神话&#xff0c;各种各样一夜暴富的神人&#xff0c;但为什么近几年这样的神话越来越少? 这个问题…

如何利用链接诱饵来为网站获取强大的流量?

相信大家在优化网站的时候会遇到这样的问题&#xff0c;网站怎么优化都没有效果&#xff0c;排名一些掉&#xff0c;而且&#xff0c;做了外链效果不太行&#xff0c;买卖链接似乎效果平淡&#xff0c;这个时候&#xff0c;我们到底要用什么方法来改变网站的现状&#xff0c;提…

本地运行php和html文件,从本地html / javascript网站发布到在线PHP文件

我想做什么从本地html / javascript网站发布到在线PHP文件。问题当我尝试使用下面的代码时&#xff0c;我不断收到以下提到的错误。背景&#xff1a;该网站旨在在本地运行。由于要由每个用户选择使用哪种浏览器&#xff0c;因此我希望找到一种可以解决上述问题的方法&#xff0…

PHP爬取网站内容

最近公司需要存在阿里云对象存储&#xff08;oss&#xff09;里的视频文件&#xff0c;而且需要18套课程的视频源文件&#xff0c;这周就要&#xff0c;我想了一下这要是一个一个找那可就麻烦了。要想想一套课程有n个章节&#xff0c;每个章节有n个视频文件。所以我下定决心要写…

wamp控制下多目录挂网站

图片&#xff1a; 前几天有个网上一起看php100视频学习php的朋友问我怎么在wamp上不同目录挂多个网站&#xff0c;我在网上搜了下资料&#xff0c;自己琢磨了一下午&#xff0c;现在把自己的方法公布出来&#xff0c;欢迎大家指正。也希望大家有更好的办法也公布出来。 以下方…

一种常见网站布局的实现

一种常见布局&#xff08;上方显示单元列表链接&#xff0c;左边显示分类链接&#xff09;的实现 很多网站有一种布局&#xff0c;就是在页面上方显示单元的列表&#xff08;可能是这样&#xff0c;也可以加其它的链接&#xff09;&#xff0c;用户单击某个单元的链接后产生的新…

任意网站支持RSS

说好的metal咋出锅了啊? 今天本来想分享metal还有一些东西在整理,就先分享一个好玩的东西,我们有时候想关注一个不错的学习网站在有更新的时候第一时间知道, 有的网站还不支持RSS, 这可能用Feed43blogtrottr这两个工具了 1,就会在此页面有内容更新。然后 打开 Feed43&#xf…

以电商网站为例,谈大型分布式架构设计与优化

本文大纲&#xff1a; 1. 使用电商案例的原因 2. 电商网站需求 3. 网站初级架构 4. 系统容量估算 5. 网站架构分析 6. 网站架构优化 本文主题为电商网站架构案例&#xff0c;将介绍如何从电商网站的需求&#xff0c;到单机架构&#xff0c;逐步演变为常用的、可供参考的分布式架…

大型php网站性能和并发访问优化方案(转载自php中文网)

网站性能优化对于大型网站来说非常重要&#xff0c;一个网站的访问打开速度影响着用户体验度&#xff0c;网站访问速度慢会造成高跳出率&#xff0c;小网站很好解决&#xff0c;那对于大型网站由于栏目多&#xff0c;图片和图像都比较庞大&#xff0c;那该怎么进行整体性能优化…

你想学的一切,只需要这一个网站就够了

简评&#xff1a;这个网站叫 Learn Anything&#xff0c;最终形态是「人们想要搜索什么知识&#xff0c;都会获得最高效且适合自己的学习路径&#xff0c;知识图谱」。现在网站刚刚建立不久&#xff0c;还处于比较初期&#xff0c;是个开源项目&#xff0c;大家有兴趣可以参与一…

程序员业余必去的六个网站!

工作了半年后&#xff0c;觉得自己的能力毫无提升的方式&#xff1f;作做好本职工作之外&#xff0c;不妨多去接一些私活&#xff0c;除了提升自己的技能之外&#xff0c;也让收入再上一层&#xff0c;何乐不为&#xff1f; 平台 0.程序员客栈 https://www.proginn.com/ 主要雇…

用xampp 和wordpress 搭建本地网站

你好&#xff0c;从今天开始&#xff0c;我将为大家带来一些我学习SEO和建站的免费教程&#xff0c;今天为大家带来的是如何用XAMPP搭建一个属于你自己的网站。来到这里&#xff0c;可以说很多在百度上已经过时了的资料需要总结的资料这里都有&#xff0c;你只要按照我的教程来…

Ruby on Rails 简介。来自于一个台湾网站,某些术语与大陆翻译不同

转:https://ihower.tw/rails4/intro.html Ruby on Rails 簡介 “Life’s too short to build something nobody wants” - Ash Maurya, Running Lean 作者 Ruby on Rails是一套非常有生產力、維護性高、容易佈署的Web開發框架。從一開始不知名的玩具&#xff0c;到現在它已經成…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

安装网站源码时提示:【写入配置失败,请检查***目录是否可写入!】 (已解决)

首先网站安装位置&#xff0c;可以百度查一查。 我的是阿里云服务器&#xff0c;位置是阿里云之前指定的路径&#xff0c;就直接拿来用了&#xff0c;具体文章参考这里&#xff1a;传送门。 然后一路绿灯&#xff0c;也没有什么服务没有开启的情况。不过这里&#xff0c;有个文…