手机写python爬虫_python爬虫——分页爬取京东商城商品信息(手机为例)-Go语言中文社区...

本文介绍了Python初学者如何编写爬虫来抓取京东网站上的手机商品信息。主要涉及F12分析网页结构、使用XPath和正则表达式解析HTML,以及处理分页和反爬虫策略。通过输入起始和结束页码,爬虫能够获取到多个商品详情页面,并打印出手机品牌信息。
摘要由CSDN通过智能技术生成

1、最近刚开始学习python   写了个爬虫练习,感觉主要是得会用F12查询网站结构代码。还涉及到反爬虫,每个网站都不一样,拿到的解析出的json数据格式也不同。得有些Web知识的基础才行。

2、上代码

import urllib.request

import time

# xpath lxml第三方包 将html转化为树形结构

from lxml import etree

# re系统包 正则

import re

"""

爬取数据方式: 1、通过网页源代码(数据绑定在html标签中)

根据目标网址绑定数据的方式决定 2、通过接口获取json(json绑定)

京东商品信息 获取目标url(开发者模式) 获取网页源代码抓取数据

搜索页面、商品子页面{获取搜索页面的所有商品 class="gl-i-wrap",所有商品的子页面【二次爬取】}

发送url获取响应数据 反爬

进行数据处理

"""

# 分页抓取手机商品信息

def jdPhone_spider(url,beginPage,endPage):

for page in range(beginPage,endPage+1):

#京东页码奇数递增处理 反爬

pn = page*2 -1

print("正在抓取第"+str(page)+"页")

fullurl = url+"&page="+str(pn)#构建带页码的url

# 防止被封

time.sleep(2)

#读取页面

load_page(fullurl)

# 读取查询页面

def load_page(url):

#定义请求头

headers = {

"user_agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"

}

# 给请求添加请求头

request = urllib.request.Request(url,headers=headers)

html = urllib.request.urlopen(request).read()

content = etree.HTML(html) #转化为tree 使用xpth进行匹配(标签匹配 跟正则挺像)

# print(content)

#获取商品的详情页面 div下的@代表属性

content_list = content.xpath('//div[@class="gl-i-wrap"]/div[@class="p-img"]/a/@href')

# print(content_list)

#url统一处理

for i in range(1,31):

# 异常处理,防止页码越界

try:

# ""前加r代表字符串(原始字符串) 正则截取数据 根据:截取

result = re.split(r":",content_list[i-1])[1]

content_list[i-1] = result

except Exception as e:

continue

# print(content_list)

# j是所有的商品详情页面

for j in content_list:

# print(j)

new_url = "http:"+j #拿到完整url 接下来读取子页面信息

load_link_page(new_url,headers)

# 读取商品详情子页面的信息

def load_link_page(url,headers):

request = urllib.request.Request(url, headers=headers)

html = urllib.request.urlopen(request).read()

content = etree.HTML(html) # 转化为tree 使用xpth进行匹配(标签)

#获取手机的品牌

brand = content.xpath('//div[@class="p-parameter"]/ul[@id="parameter-brand"]/li/@title')

print(brand)

if __name__ == '__main__':

beginPage = int(input("请输入起始页:"))

endPage = int(input("请输入结束页:"))

# 目标url 手机变成unicode编码%E6%89%8B%E6%9C%BA

url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8"

jdPhone_spider(url,beginPage,endPage)

3、部分结果

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NjYzNjYz,size_16,color_FFFFFF,t_70

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值