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 初步了解各种选择器极其简单的使用的更多相关文章

  1. crawler 听课笔记 碎碎念 2 一些爬虫须知的基本常识和流程

    html的宗旨:      <标签 属性=”属性的值“></标签>        只是对于文本的一种解释划分吧 dom的宗旨:      就是一个大数组,处理方便,效率低 xm ...

  2. crawler 听课笔记 碎碎念 3 关于python的细枝末节的回顾复习

    和廖雪峰大神的教程学了几遍后,还是出现了许多不足,于是就做一些回顾,列出一些python的细节问题,有一些就提一下,如果发现不清楚的话 还请移步https://www.liaoxuefeng.com/ ...

  3. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  4. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  5. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

  6. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  7. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  8. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  9. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

随机推荐

  1. win10 uwp 商业游戏 1.1.5

    本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...

  2. vue项目导入excel单列导入

    先安装 xlsx.js, 然后引入 import XLSX from 'xlsx'; 代码 <form> <span> <textarea name="cont ...

  3. 为什么Redis是单线程,性能还如此高?

    一. Redis为什么是单线程 注意:redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程. 因为CPU不是Redis的瓶颈.Redis的瓶颈最有可能 ...

  4. 关于MySQL中查询大数据量的情况下分页limit的性能优化

    https://blog.csdn.net/weixin_37848710/article/details/80772725

  5. HTTPS RAS

    这篇文章讲的清楚 https://zhuanlan.zhihu.com/p/75461564

  6. Python之eval和exec

    eval可以执行字符串形式的表达式 In [1]: eval("1 + 2 + 3") Out[1]: 6 In [2]: eval("a + 1", {&qu ...

  7. CodeForces - 786B -- 线段树优化建图

    刚开始想了两个小时,打算把区间分块然后计算,但是这就很灵性了看了一个大佬的博客,侵删 #include<cstring> #include<iostream> #include ...

  8. The second day of Crawler learning

    用BeatuifulSoup和Requests爬取猫途鹰网 服务器与本地的交换机制 我们每次浏览网页都是再向网页所在的服务器发送一个Request,然后服务器接受到Request后返回Response ...

  9. 【题解】Killer Names($O(n\log n)$做法)

    [题解]Killer Names(\(O(n\log n)\)做法) HDU - 6143 感觉好久没做过这种直来直去的组合题,过来水一篇题解.还以为要写一个\(MTT\)或者三模数\(NTT\),想 ...

  10. 【题解】P5462 X龙珠

    [题解]P5462 X龙珠 赛题 #B: P5462 X龙珠 | 满分: 100分 发一个set做法 维护两个set,一个按照顺序排序,一个按照值排序. 每次从大往小取,问题就变成了判断这个最大值后面 ...