记录一些遇到的问题以及学习记录:

1.获取到整个网站结构时中文乱码情况

response.encoding = 'gb2312'

编码根据爬取网站的源代码头部设置即可,我也设置了utf-8但也是乱码情况

2.xpath提取文本时如何过滤掉空格

#使用该方法既可 normalize-space()
xpath('.//dl[@class="nav bdb1"]/dt/a[3]/text()') # " 标题"
xpath('normalize-space(.//dl[@class="nav bdb1"]/dt/a[3]/text())') # "标题"

3.xpath匹配文本查询

一开始我查询是直接定位到某个标签获取数据,但是该网站的商品详情页的table数据都不一样,则结构或者顺序有些改变。导致获取到的数据不能一一对应。例如获取到处理器得到的结果是安卓版本,一开始想参照不同的页面多写几个规则但是这样合并数据也很麻烦。因此直接匹配标题文本从而得到数据

#如果每个详情页面的结构一样可以用

#不一样则使用文本匹配查询

xpath 根据文本匹配

# 等于值
//div[text()="文本"]
# 模糊匹配
//div[contains(text(),"文本")]
# 根据属性值匹配
//div[contains(@class, "")]

xpath 查找父兄子元素

# 后面所有兄弟元素 nextAll
//div[text()="文本"]/following-sibling
# 后面一个兄弟元素 next
//div[text()="文本"]/following-sibling::div[1]# 前面所有兄弟元素 prevAll
//div[text()="文本"]/preceding-sibling
# 前面一个兄弟元素 prev
//div[text()="文本"]/preceding-sibling::div[1]# 父级元素
//div[text()="文本"]/..

下面就是爬取手机信息的代码,新手不太会优化,有问题可以提出来一起交流学习

import requests
import parsel
import time
import jsonrequests.packages.urllib3.disable_warnings()
#1.正确的url地址 分析网页性质
result = []
t1 = time.time()
for page in range(1,182): #循环页数print('=====================正在爬取第{}页数据============='.format(page))url = "http://product.yesky.com/mobilephone/list{}.html#page".format(page)headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}#2.发送请求 范数据-》文本数据 图片地址 css jsresponse = requests.get(url=url,headers=headers, verify=False)response.encoding = 'gb2312'html_data = response.text# 3.数据解析selector = parsel.Selector(html_data)lis = selector.xpath('//div[@class="list blue"]') #循环产品数据定位for li in lis: #循环列表href_url = li.xpath('.//h2/a/@href').get()#产品子页面hrefhref_url = href_url+'param.shtml'#print(href_url)# 2.发送子页面请求response = requests.get(url=href_url, headers=headers, verify=False)response.encoding = 'gb2312' #解决返回页面乱码 查看你爬取网站的charset 跟它一样即可c_html_data = response.text# 3.数据解析selector = parsel.Selector(c_html_data)c_lis = selector.xpath('//body[@class="body"]')#子页面定义最大结构参考位置项#print(c_html_data)for c_li in c_lis: #循环页面内容  normalize-space()去除text()取出文本的空格 如果是None 则返回为"" 不使用默认返回nullbrand = c_li.xpath('normalize-space(.//dl[@class="nav bdb1"]/dt/a[3]/text())').get()  # 品牌name = c_li.xpath('normalize-space(.//div[@class="pro_name gray1"]/h1/text())').get()  # 名称name = name.split("(")[0]# 格式化名称if brand != '苹果' and name != "${productname}参数":type = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[4]/tr/th[contains(text(),"手机昵称")]/following-sibling::td[1]/text())').get()  # 入网型号resolution = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[2]/tr/th[contains(text(),"分辨率")]/following-sibling::td[1]/text())').get() #分辨率system = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[2]/tr/th[contains(text(),"操作系统版本")]/following-sibling::td[1]/text())').get() #手机系统cpu = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[2]/tr/th[contains(text(),"CPU型号")]/following-sibling::td[1]/text())').get()  # cpuppi = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[6]/tr/th[contains(text(),"屏幕像素密度")]/following-sibling::td[1]/text())').get()  # ppiif ppi == "":ppi = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[6]/tr/th/a[contains(text(),"屏幕像素密度")]/../following-sibling::td[1]/text())').get()  # ppiram = c_li.xpath('normalize-space(.//div[@class="mainparam"]/table[2]/tr/th[contains(text(),"RAM容量")]/following-sibling::td[1]/text())').get()  # RAM内存one = {}one['brand'] = brandone['name'] = nameone['type'] = typeone['resolution'] = resolutionone['system'] = systemone['cpu'] = cpuone['ppi'] = ppione['ram'] = ramresult.append(one)print('数据下载完毕')with open('tjw.json', 'w', encoding='utf-8') as file:file.write(json.dumps(result, indent=2, ensure_ascii=False))print("耗时:", time.time() - t1)time.sleep(10)#break  # 跳出 否则出现循环两次 第二次无数据 造成表格会有隔行,json会有全部为null的对象

python爬取天极网手机信息代码相关推荐

  1. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  2. python爬取淘宝手机信息并下载到excel文件中

    #coding=GBK import requests import re from xlwt import Workbook import xlrd import time def key_name ...

  3. iphone看python文件_Python实战 | 只需 ”三步“ 爬取二手iphone手机信息(转发送源码)...

    原标题:Python实战 | 只需 "三步" 爬取二手iphone手机信息(转发送源码) 本次实战是爬取二手苹果手机的信息,共爬取了300部手机信息,效果如下: 开发环境 环境:M ...

  4. Python爬取安居客经纪人信息

    Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...

  5. Python爬取药监局化妆品管理信息发现的问题

    Python爬取药监局化妆品管理信息 **1.json格式本质上是字符串!!! 今天在爬取国家药监局化妆品管理信息的时候,发现"json数据本质上是字符串",以前我还以为json本 ...

  6. Python 爬取拉勾招聘信息

    Python 爬取拉勾招聘信息 故事背景 最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼 ...

  7. python代码示例下载-python爬取音频下载的示例代码

    抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { & ...

  8. Python爬取De下载站相关代码

    Python爬取De下载站相关代码,因为没有设置代理,所以爬到800页左右就被干掉了,后续要加上 import urllib.request import bs4 import re import t ...

  9. python爬取电商订单_Python探索之爬取电商售卖信息代码示例

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 下面有一个示例代码,分享给大家: #! /usr/bi ...

最新文章

  1. 11月2日科技联播:销量不及预期苹果市值跌破万亿美元;腾讯表示封杀抖音因微信规则...
  2. python操作excel-Python对Excel的读写等操作(转)
  3. 应用更新iOS 开发:应用内实现 更新提醒
  4. Python异常处理体系简介(1)
  5. 补丁分发 linux,patch 命令应用补丁
  6. 李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
  7. django-oscar的订单状态总是Pending
  8. 盖茨每一秒能赚多少钱,他现在最担心的是什么?
  9. easyUI +datagirdview加载本地json的方式 笔记
  10. Mybatis常见面试题总结和基本概念
  11. Javascript特效代码大全(420个)
  12. 徐有高:为你详细解读我国40省市新能源汽车补贴政策(转载)
  13. 450米、90米、30米全国地形图DEM数据对比与分享
  14. Linux挂载ISO镜像文件的两种方式
  15. js禁止输入框输入特殊符号或emoji表情
  16. 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数
  17. x50pro怎么升级鸿蒙系统,被央视点赞的vivo X50 Pro拍照如何?实测告诉你
  18. 给Java开发者的Flutter开发基础---Dart语言
  19. Scikit-learn 秘籍 第四章 使用 scikit-learn 对数据分类
  20. 步进电机定位不准的原因及处理方法

热门文章

  1. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)
  2. “巴巴罗莎计划---我的崛起之路
  3. Pspice仿真实验 例B-1
  4. android气泡样式图片,Android实现三角形气泡效果方式汇总
  5. IDEA Java代码注释规范
  6. 计算机绘图快捷键,计算机绘图常用软件快捷键大全
  7. 毕业论文 引用与自动编号基本技巧
  8. OpenStack计算节点nove启动报错
  9. 怎么写好一篇接口文档
  10. 中国itunes ip 记录