crawler 听课笔记 碎碎念 1 初步了解各种选择器极其简单的使用
css中
身份证 id对应#
衣服 class对应 .
图片
pyquery。。。as pq
html= request.get(url=''.....'')
doc=pq(html)
doc("#dq_list > li").items() tems()拿到所有子元素
for item in items:
url= item.find('img').attr("lz_src")
url_content= requests.get(url= url).content
name= item.find('.kp-name').text()
with open("./xxxxx")+name+".jpg","wb")as f:
file.write(url_content)
马赛克合成工具foto
css选择器
1.元素选择器 直接选择文档元素,如head p 这些
2.类选择器 对<h1 class="important">,类名就是important .important就是选择所有这个类属性的元素 可结合元素选择器,比如p.important
3.id选择器 对<h1 id="intro"> id就是important #intro就是选择id=intro的元素 可结合元素选择器,比如p.#intro
类选择器可以全局共享,但是i同一d一个文档只能出现一次,是全局唯一的,不能使用单词列表
与类选择器一样都区分大小写
4.属性选择器 选择有某一个属性的元素,而不论值是什么 *[title]选择所有包含title的元素 a[herf]选择所有带有href属性的锚元素
可以选择多个元素a[herf][title]这里是and属性,要同时满足
限定值a[href="www.baidu.com"]
5.后代选择器 选择某一个元素后代的元素(在层级上面没有限制) h1 em
6.子元素选择器 范围限制在子元素 h1 > strong
Xpath
基本节点:元素、属性文本、命名空间、处理指令、注释以及根节点
节点之间的关系:父 子 兄弟 先辈 后代
nodename选取此节点的所有子节点
/从根节点选取
//从匹配的当前的节点选择文档中的节点,不考虑它们的位置
.选取当前节点
..选取当前节点的父节点
@选取属性
Xpath的谓语很强大,写在[]里面
/bookstore/book[1]选第一个book元素
/bookstore/book[last()]最后一个book元素
/bookstore/book[position()<3]选前两个
//title[@lang]选择的所有有名字为lang的属性的title属性
/bookstore/book[price>35.00]
Json 让xml简单化
import jason
obj = {'one':1,'two':2,'three':[1,2,3]}
encoded= jason.dumps(obj) 变成str
decoded= json.loads(encoded) 变成dict
xml处理
1.DOM方法 整个读取 量小的话还行,但是性能其实很慢
from xml.dom import minidom
doc = minidom.parse('book.xml')
root = doc.documentElement
print(root.nodeName)
books = root.getElementsByTagName('book')
for book in books:
titles = book.getElementsByTagName('book') #这里拿到的是一个数组
title = titles[0].childNodes[0].nodeValue
print(title)
2.SAX流模式 边读边解析 层级关系必须自己弄 在数据库中用的比较多吧
import string
from xml.parsers.expat import ParserCreate class DefaultSaxHandler:
def start_element(self,name,attrs):
self.name = name
print('elements:%s, attrs: %s'%(name,str(attrs)))
def end_element(self,name):
print('end elements:%s')%name)
def end_element(self,name):
if text.strip()
print("%S's text is %s")%(self.name,text)) handler = DefaultSaxHandler()
parser= ParserCreate()
parser.StartElementHandler = handler.start_element #<book>
parser.EndElementHandler = handler.end_element #</book>
parser.CharacterDataHandler = handler.char_data #<title>character</title>
with open('book.xml','r') as f:
parser.Parser(f.read())

正则表达式
基本匹配规则 不多复述
一些规则:
*匹配前面的字符或者表达式0词或者多次
+匹配前一个字符至少一次
?匹配前一个字符至少0次或者1次
^匹配字符串开头
$匹配字符串结束
import re
mr= re.match(r'\d{3}-\d{3,8}','010-223456')
print(mr.string)
m = re.match(r'(\d{3}-\d{3,8})$','010-223456')
print(mr.groups())
print(mr.group(0)) #原始字符串
t ='20:15:45'
m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$',t)
print(m.groups())
#分割字符串
p= re.complie(r'\d+') #先写好匹配的路径,生成python对象
print(p.split('one1two22three333'))
selenium简单爬虫使用
主要是运用以下的两个代码来爬取数据,其他的相关基本设置就看一下下面的案例
find_element(s)_by_tag_name
find_element(s)_by_css_selector
improt time
from selenium import webdriver browser = webdriver.Chrome()
browser.set_page_load_timeout(30) browser.get('xxxxxxxxxxxxxxxxx')
page_info = browser.find_element_by_csss_selector('这里贴谷歌网页中的css路径')
#目标信息假设是 共48页,每页24条
pages = int((page_info.text.split(', ')[0]).split(' ')[1]) #这样就取到了48这个数字
print('商品一共有%d页'%pages)
for i in range(pages):
if i >2:
break
url = ' xxxxxxxxxxxxx'+str(i+1)
browser.get(url)
browser.execute_script("windows.scrollTo(0,document.body.scrollHeight);")
time.sleep(2)
goods = browser.find_element_by_css_selector("xxxx主标签xxxx").find_elements_by_tag_name('li')
print('第%d页有%d件商品'%((i+1),len(goods))
for good in goods:
try:
title = good.find_element_by_css_selector('.....').text
price = good.find_element_by_css_selector('.....').text
print(title,price)
except:
print('ERROR')
但是我们也会发现,每一次爬取的时候都会跳出自动运行的浏览器
这其实是可以避免的,详细的可以参考我的学习笔记
https://www.cnblogs.com/xingnie/p/9328065.html
crawler 听课笔记 碎碎念 1 初步了解各种选择器极其简单的使用的更多相关文章
- crawler 听课笔记 碎碎念 2 一些爬虫须知的基本常识和流程
html的宗旨: <标签 属性=”属性的值“></标签> 只是对于文本的一种解释划分吧 dom的宗旨: 就是一个大数组,处理方便,效率低 xm ...
- crawler 听课笔记 碎碎念 3 关于python的细枝末节的回顾复习
和廖雪峰大神的教程学了几遍后,还是出现了许多不足,于是就做一些回顾,列出一些python的细节问题,有一些就提一下,如果发现不清楚的话 还请移步https://www.liaoxuefeng.com/ ...
- Jerry的碎碎念:SAPUI5, Angular, React和Vue
去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...
- Linux碎碎念
在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...
- 一些关于Linux入侵应急响应的碎碎念
近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...
- 一个谷粉和3年的Google Reader重度使用者的碎碎念
2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...
- 结对编程ending-我和洧洧的碎碎念
应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...
- C语言 · 分分钟的碎碎念
算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...
- 最近关于Qt学习的一点碎碎念
最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...
随机推荐
- linux scull 函数open 方法
open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当 进行下面的工作: 检查设备特定的错误(例如设备没准备好, 或者类似的硬件错误 如果它第一次打开, 初始化设 ...
- tensorflow在文本处理中的使用——词袋
代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...
- 2019-1-20-VisualStudio-安装-Python-开发
title author date CreateTime categories VisualStudio 安装 Python 开发 lindexi 2019-01-20 10:51:15 +0800 ...
- dotnet core 集成到 Mattermost 聊天工具
在找了很久的团队交流工具,发现了 Mattermost 最好用,但是还需要做一些定制化的功能,于是就找到了 Mattermost 插件开发,还找到了如何自己写服务集成到 Mattermost 里面 本 ...
- linux安装python3.*,更换Python2.*
下载并解压:Python-3.5.7.tgz [root@AH-aQYWTYSJZX01 python3]# ll total 20268 -rw-r----- 1 temp01 temp01 207 ...
- hdp3.1 hive 3.0的使用记录
近来在做项目中的技术调研,使用最新版的hdp3.1,其中使用spark2.3和hive 3.1. 遇到 一些问题,记录如下: 一,使用spark-sql client driver去访问hive创建的 ...
- CUP计算资源争抢通过IIS启用处理器关联解决
由于业务的复杂性,我们在客户环境部署的时候,采用的是预装好在一台机器然后再把机器安装到客户环境,所以为了简单方便,我们把所有的服务都安装到一台机器上面了. 在正常的使用过程中是没有任何问题的.但是当有 ...
- A non well formed numeric value encountered
在从数据库获取时间戳数据的时候返回的结果是varchar类型 然后在用date("Y-m-d H:i:s", 时间戳)的时候会报错A non well formed numeric ...
- JMeter JMS测试计划
在本节中,我们将学习如何编写一个简单的测试计划来测试Java Messaging Service(JMS). 出于测试目的,我们使用Apache ActiveMQ.有各种JMS服务器,如:glassf ...
- Apache Derby-01介绍DERBY
1.DERBY是什么: Apache Derby 是IBM于2004年贡献给Apache软件基金会的数据库,于2005年正式成为开源项目,Derby作为一个基于JAVA的关系型数据库框架,他拥有许多便 ...