python爬虫——用selenium爬取京东商品信息-博客转载-汗血宝马 - 深圳SEO优化公司

汗血宝马

首页 / 博客转载 / 正文

python爬虫——用selenium爬取京东商品信息

1.先附上效果图(我偷懒只爬了4页)

 2.京东的网址https://www.jd.com/

3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
#不加载图片
browser = webdriver.Chrome(options=options)
wait =WebDriverWait(browser,50)#设置等待时间
url = 'https://www.jd.com/'
data_list = []#设置全局变量用来存储数据
keyword="python爬虫"#关键词

4.先找到搜索框并用selenium模拟点击(这里发现京东不需要登录就能看到商品信息)

def search():
browser.get('https://www.jd.com/')
try:
input = wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#key"))
) #等到搜索框加载出来
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#search div div.form button"))
)#等到搜索按钮可以被点击
input[0].send_keys(keyword)#向搜索框内输入关键词
submit.click()#点击
total = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, '#J_bottomPage span.p-skip em:nth-child(1) b')
)
)#记录一下总页码,等到总页码加载出来
html = browser.page_source#获取网页信息
prase_html(html)#调用提取数据的函数(后面才写到)
return total[0].text
except TimeoutError:
search()

5.进入了第一页,先写好翻页的函数,需要滑动到底部才能加载后30个商品,总共有60个商品

def next_page(page_number):
try:
# 滑动到底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(random.randint(1, 3))#设置随机延迟
button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_bottomPage span.p-num a.pn-next em'))
)#翻页按钮
button.click()# 翻页动作
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList ul li:nth-child(30)"))
)#等到30个商品都加载出来
# 滑动到底部,加载出后三十个货物信息
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList ul li:nth-child(60)"))
)#等到60个商品都加载出来
wait.until(
EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#J_bottomPage span.p-num a.curr"), str(page_number))
)# 判断翻页成功,高亮的按钮数字与设置的页码一样
html = browser.page_source#获取网页信息
prase_html(html)#调用提取数据的函数
except TimeoutError:
return next_page(page_number)

6.能正常翻页就简单很多了,开始抽取需要的商品信息,搜索不同的关键词,页面的布局会有变化,需要重新写定位商品信息

def prase_html(html):
html = etree.HTML(html)
# 开始提取信息,找到ul标签下的全部li标签
try:
lis = browser.find_elements_by_class_name('gl-item')
# 遍历
for li in lis:
# 名字
title = li.find_element_by_xpath('.//div[@ ]//em').text
# 价格
price = li.find_element_by_xpath('.//div[@ ]//i').text
# 评论数
comment = li.find_elements_by_xpath('.//div[@ ]//a')
# 商铺名字
shop_name = li.find_elements_by_xpath('.//div[@ ]//a')
if comment:
comment = comment[0].text
else:
comment = None
if shop_name:
shop_name = shop_name[0].text
else:
shop_name = None
data_dict ={}#写入字典
data_dict["title"] = title
data_dict["price"] = price
data_dict["shop_name"] = shop_name
data_dict["comment"] = comment
print(data_dict)
data_list.append(data_dict)#写入全局变量
except TimeoutError:
prase_html(html)

7.存储方法

def save_html():
content = json.dumps(data_list, ensure_ascii=False, indent=2)
#把全局变量转化为json数据
with open("jingdong.json", "a+", encoding="utf-8") as f:
f.write(content)
print("json文件写入成功") with open('jingdong.csv', 'w', encoding='utf-8', newline='') as f:
# 表头
title = data_list[0].keys()
# 声明writer
writer = csv.DictWriter(f, title)
# 写入表头
writer.writeheader()
# 批量写入数据
writer.writerows(data_list)
print('csv文件写入完成')

8.开始调用

def main():
print("第", 1, "页:")
total = int(search())
for i in range(2, 5):
# for i in range(2, total + 1):#想全爬的就用这个循环
time.sleep(random.randint(1, 3))#设置随机延迟
print("第", i, "页:")
next_page(i)
save_html() if __name__ == "__main__":
main()

 

9.附上完整代码

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import random
import json
import csv
from lxml import etree options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
#不加载图片
browser = webdriver.Chrome(options=options)
wait =WebDriverWait(browser,50)#设置等待时间
url = 'https://www.jd.com/'
data_list= []#设置全局变量用来存储数据
keyword ="python爬虫"#关键词 def search():
browser.get('https://www.jd.com/')
try:
input = wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#key"))
) #等到搜索框加载出来
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#search div div.form button"))
)#等到搜索按钮可以被点击
input[0].send_keys(keyword)#向搜索框内输入关键词
submit.click()#点击
total = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, '#J_bottomPage span.p-skip em:nth-child(1) b')
)
)#记录一下总页码,等到总页码加载出来
# # 滑动到底部,加载出后三十个货物信息
# browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# wait.until(
# EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList ul li:nth-child(60)"))
# )
html = browser.page_source#获取网页信息
prase_html(html)#调用提取数据的函数
return total[0].text#返回总页数
except TimeoutError:
search() def next_page(page_number):
try:
# 滑动到底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(random.randint(1, 3))#设置随机延迟
button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_bottomPage span.p-num a.pn-next em'))
)#翻页按钮
button.click()# 翻页动作
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList ul li:nth-child(30)"))
)#等到30个商品都加载出来
# 滑动到底部,加载出后三十个货物信息
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#J_goodsList ul li:nth-child(60)"))
)#等到60个商品都加载出来
wait.until(
EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#J_bottomPage span.p-num a.curr"), str(page_number))
)# 判断翻页成功,高亮的按钮数字与设置的页码一样
html = browser.page_source#获取网页信息
prase_html(html)#调用提取数据的函数
except TimeoutError:
return next_page(page_number) def prase_html(html):
html = etree.HTML(html)
# 开始提取信息,找到ul标签下的全部li标签
try:
lis = browser.find_elements_by_class_name('gl-item')
# 遍历
for li in lis:
# 名字
title = li.find_element_by_xpath('.//div[@ ]//em').text
# 价格
price = li.find_element_by_xpath('.//div[@ ]//i').text
# 评论数
comment = li.find_elements_by_xpath('.//div[@ ]//a')
# 商铺名字
shop_name = li.find_elements_by_xpath('.//div[@ ]//a')
if comment:
comment = comment[0].text
else:
comment = None
if shop_name:
shop_name = shop_name[0].text
else:
shop_name = None
data_dict ={}#写入字典
data_dict["title"] = title
data_dict["price"] = price
data_dict["shop_name"] = shop_name
data_dict["comment"] = comment
print(data_dict)
data_list.append(data_dict)#写入全局变量
except TimeoutError:
prase_html(html) def save_html():
content = json.dumps(data_list, ensure_ascii=False, indent=2)
#把全局变量转化为json数据
with open("jingdong1.json", "a+", encoding="utf-8") as f:
f.write(content)
print("json文件写入成功") with open('jingdong1.csv', 'w', encoding='utf-8', newline='') as f:
# 表头
title = data_list[0].keys()
# 声明writer
writer = csv.DictWriter(f, title)
# 写入表头
writer.writeheader()
# 批量写入数据
writer.writerows(data_list)
print('csv文件写入完成') def main():
print("第", 1, "页:")
total = int(search())
for i in range(2, 5):
# for i in range(2, total + 1):
time.sleep(random.randint(1, 3)) # 设置随机延迟
print("第", i, "页:")
next_page(i)
save_html() if __name__ == "__main__":
main()

最后再分享一些小福利

链接:

提取码:kt2v

链接容易被举报过期,如果失效了就在这里领取吧

  • 评论区
默认头像
恨相知晚
一起参与讨论!
注销登录
JQuery攻略(五)表单验证
  • 基于Wordpress. Theme By Document. ICP备案号 浙ICP备17003951号-1

    相关内容推荐

    网站内链优化怎么操作繁昌网站优化价格黑龙江质量网站优化产品介绍网站搜索优化01金手指效率北仑seo网站推广优化如何做好企业网站关键词优化苹果cms网站优化网站优化从哪里起步网站的关键词优化支招易速达如何进行网站优化和页面优化常熟网站搜索优化湖南省网站排名怎么优化贵溪网站优化石家庄网站优化排名推广银川利于优化的网站tag 网站优化婚庆行业网站优化方案深圳免费网站优化网络推广汕头如何选择免费网站优化现在做优化哪个网站好网站排名优化使钒云速捷认可安徽知名网站优化云安网站搜索引擎优化夏津县网站优化从化公司网站优化推广教程乌兰察布网站怎么优化邢台英文网站seo优化咸宁市网站建设优化衢州快速优化网站郑州网站搭建优化网站优化是怎样做到的门头沟企业网站优化公司保山优化网站莲花网站优化互联网推广百度优化网站关键词排网站建设优化服务效果开封网站建设优化渠道香港网站优化seo培训深圳珠宝行业网站优化怎么优化wap网站笋岗网站优化互联网推广乌市网站优化排名徐州整站优化网站网站做优化认可x火18星漯河网站优化报价汕尾优化网站青羊区公司网站优化网站公告优化要多少钱信息网站优化成功案例宁波品牌网站优化昆山网站优化怎么做巴中优化网站多少钱大连网站界面优化优化网站软件只选y火15星上海网站优化项目宜昌襄阳网站优化平台江门海外网站优化漯河网站关键词优化哪家好嘉定网站优化售后服务稷山网站优化平台首页网站关键词优化哪家好杭州网站优化流程阳江网站优化是什么呼市网站关键词优化软件新沂网站优化公司方案中卫网站优化厂家襄樊市优化网站联系方式网站关键词优化到首页滨江百度网站优化公司叙永县网站seo优化排名四川省网站优化江门网站搜索引擎优化温州瓯海区高质量百度网站优化顺义网站优化收费信息类网站优化如何做郑州优质的网站优化公司对网站系统优化有什么建议武威网站优化公司新网站优化排名怎么设置镇江专业的服务行业网站优化庄河网站设计优化seo网站外链优化石排造纸业网站优化食品贸易网站优化电子商务网站站内结构优化广安市网站关键词优化高栏港网站优化价格优化网站推广选择乐云seo新乡专业网站优化公司哪家好关于网站优化的考试题普陀区官网网站优化案例seo优化虚拟主机与网站排名芜湖网站首页优化费用宝鸡网站优化机构呼市网站关键词优化软件聊城电脑网站优化公司优化排名网站更新是更新哪些班级优化大师下载安装的网站赣州百度网站优化评价网站优化效果宿州网站优化报价优化公司网站橙云速捷答允湖北信息化网站优化耗材遂宁网站综合优化seo优化网站收录怎么设置怀宁网站优化哪家有名简阳优化网站关键词怀集网站关键词优化网站搜索优化讥笑云速捷宝典台湾网站优化价格盐池网站优化公司建设网站优化多久可以见效网站优化员工提成怎么算玻璃机械网站优化独立网站优化是什么克拉玛依网站优化公司五华区网站seo优化开户长春销售行业网站优化要多少钱象山优化自己的网站昆明网站seo推广优化价格为什么现在很少看见找网站优化奉化网站优化好吗网站权重优化大概多少钱达州网站优化好天津网站综合优化茌平网站优化选哪家新站网站优化教程胶州网站优化多少钱天津律师网站优化泊头网站优化选哪家龙口营销型网站优化react优化网站打开速度企业推广网站排名优化潜江网站优化推广哪家好网站整站优化口碑好网站建设推广优化费用重庆比较好的网站优化内蒙古网站关键词优化如何优化不锈钢网站seo优化专家十堰百度网站优化成都百度网站优化联想网站优化分析企石网站关键词优化多少钱陕西专业的网站优化项目投资湛江湖南网站优化推广惠州网站排名怎样优化网站优化软件哪个好用希沃班级优化大师可信网站搜索引擎网站优化的主要方法亳州网站排名优化巩义推广网站搭建优化玻璃生产网站优化常平镇服装网站优化方案如何做SEO优化的网站关于网站优化的实训报告达州芜湖网站优化宝塔面板优化网站专题页网站优化价格长春网站优化培训苏州网站关键词优化服务云南优化型网站深圳在线网站优化公司有哪些宁波网站优化怎么样排名需要优化哪些网站房山网站页面优化宣城企业网站推广优化seo网站优化渠道南京网站如何优化内容链接宁波象山县便宜百度网站优化崇明区官方网站优化排名从哪些方面分析网站优化平谷网站关键字优化大连大型网站优化章丘网站优化找哪家南雄网站优化软件自贡网站优化公司天柱县网站优化服务武汉网站关键词优化价格岑溪关键词网站优化烟台百度网站快速优化莆田外贸网站优化免费的网站优化软件海淀网站优化公司高阳网站优化排名石家庄网站优化步骤福田收费网站优化的有效方式西城公司网站排名优化大港网站关键词优化哪家便宜网站优化 长尾词什么意思新乡网站推广优化费用多少网站排名优化忄金苹果下拉广行唐网站优化推广娄底一站式网站建设优化龙口网站优化哪家好网站快速优化壳云速捷好口碑东光网站快速优化排名许昌整站seo网站优化软件塘厦网站优化公司独立站网站打开速度优化商丘律师网站优化

    合作伙伴

    深圳SEO优化公司

    龙岗网络公司
    深圳网站优化
    龙岗网站建设
    坪山网站建设
    百度标王推广
    天下网标王
    SEO优化按天计费
    SEO按天计费系统