苏宁图书爬取

后续技术类文档更新到微信公众号-------->>喜欢的扫码关注

在这里插入图片描述

苏宁图书爬取:

  1. 创建项目工程:
    Scrapy startprojeect suning(项目名称)
  2. 创建爬虫:
    Scrapy genspider sn book.suning.com
  3. 获取大分类的分组:

div_list = response.xpath("//div[@class=‘menu-list’]/div[@class=‘menu-item’]")
4. 获取大分类下面的子菜单:

div_sub_list = response.xpath("//div[@class=‘menu-list’]/div[@class=‘menu-sub’]")
for div in div_list:
item = {}
#大分类的名字

item[“b_cate”] = div.xpath(".//h3/a/text()").extract_first()

当前大分类的所有的中间分类的位置

current_sub_div = div_sub_list[div_list.index(div)]

获取中间分类的分组

p_list = current_sub_div.xpath(".//div[@class=‘submenu-left’]/p[@class=‘submenu-item’]")

Xpath取当前节点的兄弟节点:
./following-sibling::

获取小分类的分组:

获取小分类的分组

li_list = p.xpath("./following-sibling::ul[1]/li")

for li in li_list:
# 小分类的名字
item[“s_cate”] = li.xpath("./a/text()").extract_first()
# 小分类的URL地址
item[“s_href”] = li.xpath("./a/@href").extract_first()

请求图书的列表页

yield scrapy.Request(
item[“s_href”],
callback=self.parse_book_list,
meta={“item”: deepcopy(item)}#采用深拷贝,将每一次的值都重新复制一份,避免不会被覆盖
)

经过测试后发现只能拿到第一页的前半部分数据:
所以确定后半部分和前半部分的url不同
找到后半段部分的url

Request URL:
https://list.suning.com/emall/showProductList.do?ci=502325&pg=03&cp=0&il=0&iy=0&adNumber=0&n=1&ch=4&prune=0&sesab=ACBAAB&id=IDENTIFYING&cc=029&paging=1&sub=0

发送请求,获取列表页第一页后一部分的数据

next_part_url_temp = “https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp=0&il=0&iy=0&adNumber=0&n=1&ch=4&sesab=ABBAAA&id=IDENTIFYING&cc=010&paging=1&sub=0

获取url地址的ci

以上几个url里面没有我们想要的切割字符所以会报错
ci = item[“s_href”].split("-")[1]# https://list.suning.com/1-502320-0.html
next_part_url = next_part_url_temp.format(ci)

传递参数发起请求请求后一部分数据:
yield scrapy.Request(
next_part_url,#拼接好的后一部分数据图书的url
callback=self.parse_book_list,#回调函数用来发起请求
meta={“item”: deepcopy(item)}#参数传递;为了避免覆盖使用深拷贝的方法
)

处理图书的列表内容:
def parse_book_list(self, response): # 处理图书列表页内容
item = response.meta[“item”]#请求传递过来的参数
获取图书列表页的分组:

获取图书列表页的分组

li_list = response.xpath("//div[@id=‘filter-results’]/ul/li")

li_list = response.xpath("//li[contains(@class,‘product book’)]")
“contains”在以上标签中的意思是“包含“
语句意思是:凡是li标签下面的class属性里面包含’product book’的值;都找到

找书名

for li in li_list[:1]:
# 书名
item[“book_name”] = li.xpath(".//p[@class=‘sell-point’]/a/text()").extract_first().strip()
找书的url地址

书的url地址,不完整

item[“book_href”] = li.xpath(".//p[@class=‘sell-point’]/a/@href").extract_first()
以上获取到的url地址不完整可以拼接:
item[“book_href”] = self.par_url + li.xpath(".//p[@class=‘sell-point’]/a/@href").extract_first()
找书店名:

书店名

item[“book_store_name”] = li.xpath(
“.//p[contains(@class,‘seller oh no-more’)]/a/text()”).extract_first()

发送详情页的请求

yield response.follow(
item[“book_href”],
callback=self.parse_book_detail,
meta={“item”: deepcopy(item)}
)

定义处理图书详情页的内容:

处理图书详情页的内容

def parse_book_detail(self):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了爬取苏宁易购的商品数据,你可以使用Selenium库来模拟浏览器操作。首先,你需要分析目标页面的URL,然后使用Selenium打开该URL。在打开页面后,你可以使用`execute_script`方法来模拟向下滑动加载数据。例如,你可以使用以下代码来模拟向下滑动一屏加载数据: ```python from selenium import webdriver # 创建浏览器实例 bro = webdriver.Chrome() # 打开目标页面 bro.get("https://search.suning.com/红米K40/") # 模拟向下滑动一屏 bro.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 模拟加载数据 # ... # 关闭浏览器 bro.quit() ``` 在这个示例中,我们使用Chrome浏览器作为示例,你可以根据需要选择其他浏览器。然后,你可以根据实际情况编写代码来处理加载的数据。请注意,爬取网站数据时需要遵守规定,不要对目标网站造成过大的负担。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [爬虫项目十:Python苏宁易购商品数据、评论数据爬取](https://blog.csdn.net/weixin_47163937/article/details/115263957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值