python爬虫笔记

article/2025/11/8 5:06:45

requests

请求库

import requests
import recontent = requests.get('https://book.douban.com/').text 
pattern = re.compile('<li.*?cover.*?href="(.*?)".*?title="(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(.*?)</span>.*?</li>', re.S) # 匹配换行
results = re.findall(pattern, content) # 返回一个元组
for result in results:url, name, author, date = resultauthor = re.sub('\s', '', author) # 替换date = re.sub('\s', '', date)print(url, name, author, date)结果
https://book.douban.com/subject/26925834/?icn=index-editionrecommend 别走出这一步 []S.J.沃森 2017-1
https://book.douban.com/subject/26953532/?icn=index-editionrecommend 白先勇细说红楼梦 白先勇 2017-2-1
https://book.douban.com/subject/26959159/?icn=index-editionrecommend 岁月凶猛 冯仑 2017-2

2

import requests
import recontent=requests.get('https://www.myaijarvis.com/').text
#print(content)
pattern=re.compile('<div.*?title-article.*?<div.*?list-pic.*?href="(.*?)".*?<h1>(.*?)</h1>', re.S)
results=re.findall(pattern,content)
#print(results)
for result in results:url,title=resultprint(url,title)结果
https://www.myaijarvis.com/archives/351/ JavaScript学习笔记
https://www.myaijarvis.com/archives/349/ 国风舞蹈—— 【霜降】 甜到你 ❤ 里呀 ~【紫颜】
https://www.myaijarvis.com/archives/324/ C++ 引用&amp;&amp;C语言二级指针(地址法理解)

XPath

快速获得需要的数据
在这里插入图片描述

在这里插入图片描述

/html/body/div[3]/div/div[1]/div/a/h1JavaScript学习笔记
国风舞蹈—— 【霜降】 甜到你 ❤ 里呀 ~【紫颜】
C++ 引用&&C语言二级指针(地址法理解)
C语言指针二(地址法理解)
C语言指针一(地址法理解)
typecho开启伪静态,去掉那个讨厌的index.php
HTML5+CSS+JS基础教程笔记

BeautifulSoup

HTML和XML的解析库

https://cuiqingcai.com/1319.html

标准选择器

  • 可根据标签名、属性、内容查找文档
    find_all( name , attrs , recursive , text , **kwargs )
    find( name , attrs , recursive , text , **kwargs )
    find返回单个元素,find_all返回所有元素组成的列表
html='''
<div class="panel"><div class="panel-heading"><h4>Hello</h4></div><div class="panel-body"><ul class="list" id="list-1" name="elements"><li class="element">Foo</li><li class="element">Bar</li><li class="element">Jay</li></ul><ul class="list list-small" id="list-2"><li class="element">Foo</li><li class="element">Bar</li></ul></div>
</div>
'''from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')# 支持嵌套选择
for ul in soup.find_all('ul'):print(ul.find_all('li'))print(soup.find_all(attrs={'id': 'list-1'}))
print(soup.find_all(attrs={'name': 'elements'}))print(soup.find_all(id='list-1'))
print(soup.find_all(class_='element'))print(soup.find_all(text='Foo'))print(soup.find('ul'))
print(type(soup.find('ul')))
print(soup.find('page'))

find_parents() find_parent()
find_parents()返回所有祖先节点,find_parent()返回直接父节点。

find_next_siblings() find_next_sibling()
find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。

find_previous_siblings() find_previous_sibling()
find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。

find_all_next() find_next()
find_all_next()返回节点后所有符合条件的节点, find_next()返回第一个符合条件的节点

find_all_previous() 和 find_previous()
find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点

CSS选择器

通过select()直接传入CSS选择器即可完成选择

html='''
<div class="panel"><div class="panel-heading"><h4>Hello</h4></div><div class="panel-body"><ul class="list" id="list-1"><li class="element">Foo</li><li class="element">Bar</li><li class="element">Jay</li></ul><ul class="list list-small" id="list-2"><li class="element">Foo</li><li class="element">Bar</li></ul></div>
</div>
'''from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')print(soup.select('.panel .panel-heading'))
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
print(type(soup.select('ul')[0])) # <class 'bs4.element.Tag'># 支持嵌套选择
for ul in soup.select('ul'):print(ul.select('li'))# 获取属性
for ul in soup.select('ul'):print(ul['id'])print(ul.attrs['id'])
'''
list-1
list-1
list-2
list-2
'''# 获取内容
for li in soup.select('li'):print(li.string)print(li.get_text())
'''
Foo
Bar
Jay
Foo
Bar
'''

pyquery

解析库

通过doc()直接传入CSS选择器即可完成选择

初始化参数可以是字符串、URL、文件名

from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com') # 初始化
print(doc('head')) # 选择节点
html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li'))) # <class 'pyquery.pyquery.PyQuery'>item=doc(CSS选择器)# 函数调用与jQuery中函数用法完全相同
item.find('.item-0')
item.children()
item.parent()
item.attr('href') # 获取属性
item.text()
item.html()
item.addClass('xxx')
item.removeClass('xxx')
...# 返回多个节点
lis = doc('li').items()
print(type(lis))
for li in lis:print(li)     print(type(li))# <class 'pyquery.pyquery.PyQuery'>

Selenium

Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。

https://cuiqingcai.com/5630.html

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitbrowser = webdriver.Chrome()
try:browser.get('https://www.baidu.com')input = browser.find_element_by_id('kw')input.send_keys('Python')input.send_keys(Keys.ENTER)wait = WebDriverWait(browser, 10)wait.until(EC.presence_of_element_located((By.ID, 'content_left')))print(browser.current_url)print(browser.get_cookies())print(browser.page_source)
finally:browser.close()

Scrapy

进入命令行调试

scrapy shell https://www.myaijarvis.com

在这里插入图片描述


http://chatgpt.dhexx.cn/article/qekmeDYH.shtml

相关文章

爬虫学习笔记

目录 一、 初识爬虫 1. 简单的爬虫 2. web请求 3. http协议 4. requests入门 二、数据解析与提取 1. 概述 2. Regular Expression 正则表达式 3. re模块 4. 豆瓣电影练习 5. 电影天堂练习 6. bs4 北京新发地、热搜榜 7. 抓取图库图片 8. Xpath语法 9. xpath猪八…

Python爬虫自学

Python爬虫自学 前言 这是我自己学习Python爬虫的学习笔记&#xff0c;内容大部分来自上海交通大学出版的《Python语言程序设计实践教程》&#xff0c;欢迎大家一起交流 参考博客&#xff1a; Python爬虫教程&#xff08;纯自学经历&#xff0c;保姆级教程&#xff09; Be…

爬虫基础day01

爬虫基础day01 一、介绍 什么是网络爬虫&#xff1f;&#xff08;面试题&#xff09; 网络爬虫&#xff08;Web Spider 又称为网页蜘蛛、网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;就收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动的抓取互联…

网络爬虫详解

网络爬虫&#xff08;web crawler&#xff0c;又称为网页蜘蛛&#xff08;只针对网页&#xff0c;B/S系统&#xff09;&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓…

Linux C语言实现简单爬虫

文章目录 代码案例源代码 应用知识hostent结构体gethostbyname()函数inet_pton和inet_ntopinet_ptoninet_ntop sockaddr_inin_addr结构htons 编辑socket()connect()sprintf函数format标签属性 setsockopt 代码案例 爬到的HTML文件 输入终端的参数 源代码 /***************…

fcntl函数 和 ioctl函数

文章目录 一、fcntl 函数二、ioctl 函数 一、fcntl 函数 fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作&#xff0c;譬如复制一个文件描述符&#xff08;与dup、dup2 作用相同&#xff09;、获取/设置文件描述符标志、获取/设置文件状态标志等&#xff0c;类似…

linux ioctl 理解

背景 传统的操作系统可以分成两层&#xff0c;用户层和内核层。内核代码处理敏感资源同时在不同应用程序中间提供了安全且可信的隔离&#xff0c;出于此&#xff0c;操作系统要阻止用户态的程序直接访问内核资源。用户空间的程序通常发出一个给内核的请求&#xff0c;该请求称为…

linux ioctl函数介绍

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioctl…

ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

ioctl函数详解 一、ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); //io的控制&#xff0c;设备的控制/***第一个参数d是打开的文件描述符***//***The second argument is a device-dependent request code&…

IOCTL函数用法

.ioctl 的实现 一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的…

IOCTL函数用法详解

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数 。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。它的调用个数如下&#xff1a; int ioctl(int fd, ind cmd, …)&#xff1b; 其中fd是用户程序打…

linux ioctl()详解

一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的字符设备都需要的…

ioctl 详细介绍

ioctl 详细介绍 (一)ioctl 的作用: 通过设备驱动程序执行各种类型的硬件控制。除了简单数据传输外,大部分设备可以执行其他的一些操作,比如,用户空间经常请求设备锁门、弹出介质、报告错误信息、改变波特率或者执行自破坏等等。 Ioctl的操作通过流程图简言之: 从图…

ioctl函数

一、什么是ioctl   ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。   ioctl函数是文件结构中的一个属性分量&#xff0c;就是说如果你的驱动程序…

linux驱动开发(四):ioctl()函数

前文中我们介绍了应用程序通过使用虚拟文件系统VFS提供的接口&#xff0c;来控制字符驱动程序&#xff0c;完成字符驱动设备的open、close、read、write操作。但是如果我们想进行除此以外的其他操作&#xff0c;拓展一些file_operations给出的接口中没有的自定义功能&#xff0…

linux 内核 - ioctl 函数详解

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioc…

第10章综合案例1广电大数据分析

第10章综合案例1广电大数据分析 实验目的及要求 &#xff08;1&#xff09;现有用户观看历史和用户信息两个广电大数据文件&#xff0c;将对用户数据进行大数据分析。 实验系统环境及版本 Linux Ubuntu 20.04 JDK1.8 Hadoop3.1.0 MySQL8.0.28 Hive3.1.2 实验任务 基本…

图解大数据 | 综合案例-使用Spark分析挖掘零售交易数据

作者&#xff1a;韩信子ShowMeAI 教程地址&#xff1a;http://www.showmeai.tech/tutorials/84 本文地址&#xff1a;http://www.showmeai.tech/article-detail/177 声明&#xff1a;版权所有&#xff0c;转载请联系平台与作者并注明出处 收藏ShowMeAI查看更多精彩内容 引言 …

大数据之实践案例分析

前言 公司由页游转手游&#xff0c;公司的数据分析需要针对手游进行设计&#xff0c;所以原来的那一套针对页游的数据分析框架就显得不是很合适了&#xff0c;一方面在于手游和页游一些业务逻辑上的不同&#xff0c;另外一方面是数据量级上的改变&#xff0c;以及渠道、区服之间…

大数据分析案例-基于朴素贝叶斯算法构建电信客户流失分析预警模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…