XPath爬取网站信息

之前一直使用BeautifulSoup 爬取各种网站数据

下午研究了下XPath,只能说太牛B

会者不难,难者不会,你会爱上XPath

废话不多说,直接上源码

# encoding=utf-8
import requests
from bs4 import BeautifulSoup  # 用来解析网页
import uuid
import pymysql
import time  # 导入时间隔
import datetime
import threading
from lxml import etree
import osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 ''Safari/537.36','Accept-Language': 'zh-CN,zh;q=0.8'
}def func():# 获取现在时间now_time = datetime.datetime.now()# 获取明天时间next_time = now_time + datetime.timedelta(days=+1)next_year = next_time.date().yearnext_month = next_time.date().monthnext_day = next_time.date().day# 获取明天3点时间next_time = datetime.datetime.strptime(str(next_year) + "-" + str(next_month) + "-" + str(next_day) + " 22:00:00","%Y-%m-%d %H:%M:%S")# # 获取昨天时间# last_time = now_time + datetime.timedelta(days=-1)# 获取距离明天3点时间,单位为秒timer_start_time = (next_time - now_time).total_seconds()conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='zhang', charset='utf8')cur = conn.cursor()print("数据库已连接")for i in range(1, 2):  # 爬取第一页到第3页的数据resp = requests.get(f"http://www.wbncp.com/PriceQuery.aspx?PageNo={i}&ItemName=牛肉&DateStart=&DateEnd=").content.decode('utf-8')et_html = etree.HTML(resp)html_data = et_html.xpath('//*/body/form/table[5]/tr/td[3]/table[2]/tr/td[1]/table/tr/td/table[3]/tr')# .encode('ISO-8859-1').decode('UTF-8')print(html_data)for i in html_data:print(i.xpath('td')[0].text.strip())print(i.xpath('td')[1].text.strip())print(i.xpath('td')[2].text.strip())print(i.xpath('td')[3].text.strip())print(i.xpath('td')[5].text.strip())print(i.xpath('td')[7].text.strip())# dd = soup.find_all('table')[21].find_all('tr')# for ss in dd:  # tr是每一行内容,在所有的行中,遍历每一列的内容#     shopDate = ss.findAll('td')[0].text.strip()#     print(shopDate)# # if str(datetime.datetime.now().day) == str(shopDate.split('-')[2].strip('0')):# productId = str(uuid.uuid1())# name = ss.findAll('span')[1].text.strip()# area = ss.findAll('span')[2].text.strip()# price = ss.findAll('span')[3].text.strip('元/斤')# unit = '元/斤'# sql = "insert into price_data(id,name,area,price,unit,creatime) VALUES (%s,%s,%s,%s,%s,%s)"# cur.execute(sql, (productId, name, area, price, unit, shopDate))# print("sql已执行")print(f"一个页面完事了{i}")conn.commit()time.sleep(1)  # 防止服务器蹦了,间隔一秒钟cur.close()conn.close()print(timer_start_time)timer = threading.Timer(timer_start_time, func)timer.start()# 定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(2, func)
timer.start()

注释加黑的代码是之前的BeautifulSoup 爬取的代码,BeautifulSoup 这个爬取比较简单了一直用find最后来个find_all,然后遍历循环就好了,不过有利有弊

昨天就碰到了难题,一个页面30多个Table,而且class一样,难不成一个一个数去查找你要爬取的数据?

不管你们累不累,我昨天是差点崩溃了,数到21个Table才找到了我想要的数据,然后还学习了一下正则表达式,结果,哎,天生的对运算符有点抵触,学不会,然后就放弃了,然后准备学习下XPath,然后就So Easy!

XPath使用方法

  1. 第一步找到你想要获取的网页,比如你是房地产卖房子的销售,想要做个表格,来统计本市的所有房价,再或者高大上点做个趋势图,看看房价涨势
  2. 就拿安居客来说吧,打开网页
  3. 然后按下F12,用鼠标选择到价格的代码位置
  4. 然后鼠标右键,获取XPath
  5. 把我代码里面的路径改改就完事了
  6. 这是价格获取,相同的办法你也可以获取城市,小区,面积,户型所有的数据做成表格

XPath遇到的各种坑

又到总结的时候了,每次写出来的文章都是我踩坑几十次才得到的成果,前人种树后人乘凉,嗯,你们看好啦,以后别犯我的错哈

  1. 第一,这个编码跟BeautifulSoup很大区别,因为BeautifulSoup,解析出来的都是中文,没有乱码,而Xpath解析出来的全是乱码,经过百度几十次各种方法都测试了,找到一种办法成功了获取获取网页的时候首先转码,不然都是乱码

  2. 获取一行数据不要加索引

  3. 在页面上面的在页面解析后是不存在的,那是页面渲染出来的,不要添加不然永远获取的都是空值<tbody>

用XPath一分钟上手爬虫,良心之作__一蓑烟雨任平生相关推荐

  1. 小猪的Python学习之旅 —— 10.三分钟上手Requests库

    小猪的Python学习之旅 -- 10.三分钟上手Requests库 标签:Python 一句话概括本文: 本节讲解Requests库的常见使用,以及一个实战项目: 扒取某一篇微信文章里所有的图片,视 ...

  2. access 提供程序无法确定object 值_Python | 加一行注释,让你的程序提速10+倍!numba库十分钟上手指南...

    如果你在使用Python进行高性能计算,Numba提供的加速效果可以比肩原生的C/C++程序,只需要在函数上添加一行@jit的装饰.它支持CPU和GPU,是数据科学家必不可少的编程利器. 之前的文章 ...

  3. 自动调试自动编译五分钟上手

    Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平板.手机等设备下进项调试. ...

  4. AirtestIDE 教程 — 5分钟上手自动化测试

    AirtestIDE 教程 - 5分钟上手自动化测试::http://airtest.netease.com/tutorial/Tutorial.html AirtestIDE 官方文档:http:/ ...

  5. vuex commit 模块_一分钟上手Vuex

    Vuex介绍 Vuex是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官 ...

  6. 零基础 5 分钟上手,程序员喜提 AIoT 新利器!

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 近几年来,物联网发展迅速,2017 年,物联网设备数量首次超过全球人口.据预测,到 2025 年,物联网设备将超过 215 亿. 可与日 ...

  7. 教你三分钟上手阿里云OOS上传操作

    教你三分钟上手阿里云OOS上传操作 1.注册登录 如果小伙伴需要进行使用阿里云oss操作,第一步我们得注册/登录阿里云 https://www.aliyun.com/,小编建议大家尽量使用支付宝登录, ...

  8. 1-5分钟上手自动化测试——Airtest+Poco快速上手

    1 | 5分钟上手自动化测试--Airtest+Poco快速上手 1.1 前言 本文档将演示如何使用Airtest Project专用的编辑器AirtestIDE,编写Airtest+Poco自动化脚 ...

  9. 15分钟上手vue3.0(小结)

    这篇文章主要介绍了15分钟上手vue3.0,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 Vue 3 还没有正式发布,但是 Alpha 版本已经发布了. 虽然官方还不推荐 ...

最新文章

  1. Linux系统备份策略探讨
  2. QCOW2 — 再谈 COW、ROW 快照技术
  3. 2016阅读总结——我的问题就是读书太少
  4. OpenCV相交凸intersectConvex的实例(附完整代码)
  5. 深拷贝、浅拷贝以及引用传递和按值传递的区别与联系
  6. 人工智能先驱 Nils Nilsson 去世,吴恩达、Yann LeCun 悼念
  7. 著名音频库多角度对比(多平台可用)
  8. 学习python 基础密码验证
  9. 用mysql制作一个登录_连接数据库制作一个简单的登入页面1
  10. Windows环境下修改IP的bat文件
  11. Oracle EBS流程之--PO ER Model
  12. paypal支付对接(付款方式:即时付款、快速付款):PC端支付、APP端支付,异步回调IPN
  13. 使用来自文件“***.snk”的公钥对输出签名时出错
  14. 《杀生》,胡说一下电影与思考
  15. 雏鸟(1)--Foundation
  16. SMP,UMA,NUMA,MPP的概念理解
  17. Snort - manual 笔记(二)
  18. 趣图丨阿里p6大概啥水平?是不是不行?
  19. 康宁杰瑞任命前默克中国研发中心负责人担任首席医学官
  20. 高中体测数据可视化(体测分数_男生,体测分数-女生)

热门文章

  1. 怎样给路由器设置密码
  2. 真·卷积神经网络发明者福岛邦彦获奖!李飞飞、LSTM之父点赞祝贺
  3. squid代理服务器笔记
  4. 如何实现炫酷的ArtLine
  5. 1019 数字黑洞(PAT乙级)
  6. jtdhrsgeagrshtd
  7. 当用户越来越“挑剔”,智能音箱如何押注未来?
  8. 2.初识Abp(Postgresql)
  9. 死亡计算机在线应用使用,死亡计算器怎么使用,死亡计算器使用技巧
  10. 方舟原始恐惧mod生物代码_【安卓MOD】方舟生存进化2.0内置修改菜单