python爬虫科研数据提取_python爬虫数据提取四之pyquery
1 pyquery
简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便
2 pyquery基本用法
2.1 安装
pip install pyquery
2.2 初始化
字符串初始化
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
first itemsecond itemthird itemfourth itemfifth item
URL初始化
from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com')
print(doc('head'))
ç�¾åº¦ä¸�ä¸�ï¼�ä½ å°±ç�¥é��
文件初始化
from pyquery import PyQuery as pq
doc = pq(filename='test.html')
print(doc('li'))
11111111112222222222333333333344444444445555555555
2.3 基本CSS选择器
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
first itemsecond itemthird itemfourth itemfifth item
2.4 查找元素
2.4.1 子元素
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)
- first item
- second item
- third item
- fourth item
- fifth item
first itemsecond itemthird itemfourth itemfifth item
lis = items.children()
print(type(lis))
print(lis)
first itemsecond itemthird itemfourth itemfifth item
lis = items.children('.active')
print(lis)
third itemfourth item
注意:这里的item-0和active是两个类,在html中可以给同一元素设置两个类,中间用空格隔开
2.4.2 父元素
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)
- first item
- second item
- third item
- fourth item
- fifth item
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)
- first item
- second item
- third item
- fourth item
- fifth item
- first item
- second item
- third item
- fourth item
- fifth item
parent = items.parents('.wrap')
print(parent)
- first item
- second item
- third item
- fourth item
- fifth item
2.4.3 兄弟元素
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
second itemfirst itemfourth itemfifth item
可以看到,结果的顺序并不是完全和输入的顺序一致
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active') # 表示class为list的元素下的元素,这个元素的class为item-0和active
print(li.siblings('.active'))
fourth item
2.5 遍历
单个元素
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
third item
多个元素
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:
print(li)
first itemsecond itemthird itemfourth itemfifth item
2.6 获取信息
获取属性
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)
third item
link3.html
link3.html
获取文本
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())
third item
third item
获取HTML
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())
third item
third item
2.7 DOM操作
addClass、removeClass
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)
third itemthird itemthird item
attr、css
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)
third itemthird itemthird item
remove
html = '''
Hello, World
This is a paragraph.
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())
wrap.find('p').remove()
print(wrap.text())
Hello, World
This is a paragraph.
Hello, World
2.8 伪类选择器
html = '''
- first item
- second item
- third item
- fourth item
- fifth item
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')
print(li)
li = doc('li:last-child')
print(li)
li = doc('li:nth-child(2)')
print(li)
li = doc('li:gt(2)')# index > 2 的所有子元素,从0开始
print(li)
li = doc('li:nth-child(2n)')
print(li)
li = doc('li:contains(second)') # 根据文本选择
print(li)
first itemfifth itemsecond itemfourth itemfifth itemsecond itemfourth itemsecond item
3 实战---爬取百度校花吧(pyquery版)
import requests
from lxml import etree
import os
from pyquery import PyQuery as pq
class Baidu(object):
def __init__(self, name):
self.url = 'http://tieba.baidu.com/f?ie=utf-8&kw={}'.format(name)
# 使用较老版本的请求头,该浏览器不支持js
self.headers = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) '
}
# 发送请求,获取响应
def get_data(self, url):
response = requests.get(url,headers=self.headers)
return response.content
# 解析列表页数据,获取列表页面帖子的标题和链接
def parse_list_page(self, data):
with open('baidu1.html','wb') as f:
f.write(data)
# 实例化etree对象
# html = etree.HTML(data).
doc = pq(data)
node_list= doc.find('.j_thread_list .threadlist_title a')
# 使用xpath语法,提取网页数据
# node_list = html.xpath("//*[@id='thread_list']/li[@class=' j_thread_list clearfix']/div/div[2]/div[1]/div[1]/a")
# 判断获取结果
# print(len(node_list))
data_list = []
# 遍历node_list
for node in node_list.items():
temp = {}
temp['url'] = 'http://tieba.baidu.com' + node.attr('href')
temp['title'] = node.text()
data_list.append(temp)
# 提取下一页的节点
next_node = doc.find('#frs_list_pager .next').attr('href')
# next_node = html.xpath('//*[@id="frs_list_pager"]/a[last()-1]/@href')[0]
# print(next_node)
# 拼接下一页的完整url
next_url = 'http:' + next_node
# print(next_url)
return data_list,next_url
def parse_detail_page(self, data_list):
html = etree.HTML(data_list)
doc = pq(data_list)
# 提取详情页面的图片链接
imagelst = doc.find('.BDE_Image').items()
image_list = [img.attr('src') for img in imagelst]
# image_list = html.xpath("//cc/div[contains(@class,'d_post')]/img[@class='BDE_Image']/@src")
# 返回图片节点列表
print(image_list)
return image_list
# 下载图片,保存图片文件
# 创建文件夹
def download(self, image_list):
if not os.path.exists('images1'):
os.makedirs('images1')
for image in image_list:
# os.sep在mac系统中是/,如果是windows系统,\\,跨平台
file_name = 'images1'+ os.sep + image.split('/')[-1]
image_data = self.get_data(image)
with open(file_name,'wb') as f:
f.write(image_data)
def run(self):
# 构造url和请求头
# 发送请求,获取响应
next_url = self.url
# 开启循环,
while next_url:
data = self.get_data(next_url)
# 解析列表页数据,返回的列表数据、下一页的的数据
data_list,next_url = self.parse_list_page(data)
# 解析详情页的数据,获取详情页的图片的链接地址
for data in data_list:
url = data['url']
result_list = self.get_data(url)
image_list = self.parse_detail_page(result_list)
# 保存数据,下载图片
self.download(image_list)
if __name__ == '__main__':
# 爬取百度校花吧所有图片并存在文件夹中
baidu = Baidu('校花吧')
baidu.run()
python爬虫科研数据提取_python爬虫数据提取四之pyquery相关推荐
- python win32ui选取文件夹_Python爬虫基础之认识html和学习数据提取(上)
我:我已经学会了基本的python,接下来可以学什么鸭? 惨绿青年:接下来可以学习制作python爬虫了,但还是需要学习相关的知识. 我:什么知识鸭? 惨绿青年:网页的相关知识.我们看到的网页一般是h ...
- python爬取网页数据软件_python爬虫入门10分钟爬取一个网站
一.基础入门 1.1什么是爬虫 爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序. 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HT ...
- python数据入库_python爬虫(中)--数据建模与保存(入库)
前言 前面,讲的是提取出来的数据保存进一个extracted_data,再保存进extracted_data_,变成一个list包含list的情况,当然你只提取一项,那就没有必要这么做了,可是我的项目 ...
- python爬虫网络数据包_Python爬虫之多线程图虫网数据爬取(十六)
Python爬虫之多线程图虫网数据爬取(十六) 发布时间:2019-05-14 10:11, 浏览次数:289 , 标签: Python 原创不易,转载前请注明博主的链接地址:Blessy_Zhu h ...
- python监控服务器信息进行可视化_Python实现数据可视化,看如何监控你的爬虫
好,开始今天的文章. 今天主要是来说一下怎么可视化来监控你的爬虫的状态. 相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询的方式多种多样.今天我来讲一种可视化 ...
- python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- python爬取收费素材_Python爬虫练习:爬取素材网站数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 在工作中的电子文案.ppt,生活中的新闻.广告,都离不开大量的素材,而素材 ...
- python爬取网页数据流程_Python爬虫爬取数据的步骤
爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...
- python爬取数据步骤_Python爬虫爬取数据的步骤
爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...
- pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
1. JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于 ...
最新文章
- 使用jQuery的.css()和.attr()方法设置元素left属性的注意点
- RuntimeError: dictionary changed size during iteration 解决办法
- 【转】 指针函数与函数指针的区别
- Java 设计模式之外观模式
- Angular Schematics 学习笔记
- SAP Fiori Application Generator 在 Visual Studio Code 启动时遇到的错误消息
- Java SAO操作-使用lambda代替字符串
- 传说中的神器: shared_ptr/weak_ptr/scoped_ptr
- python爬取景点数据看该去哪里玩——南京篇
- 一次数学分析的教学(依然进行中)
- Windows NTP 服务器配置及开启
- Android如何制作本地音乐播放器,简单实现Android本地音乐播放器
- 工业机器人实训系统(鼠标装配)
- 遗传算法及其应用_遗传算法及其广泛应用
- [150529](必看)档案挂靠与打回生源地、暂缓的对比 (广州)
- 同一操作系统中安装多个不同版本谷歌Chrome浏览器
- POJ 3080 Blue Jeans(KMP + 暴力)
- 兵卒情缘酒新品上市发布会
- java jacob更新目录,jacob更新word目录
- python实现微信发红包
热门文章
- JEESZ-SSO解决方案
- 《食堂远程下单系统》设计规格说明书
- HBase源码分析之HRegion上compact流程分析(三)
- [C++] STACK_Principle
- C与C++在const用法上的区别
- Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库
- 基于Windows Server 2008 R2的WSFC实现SQL Server 2012高可用性组(AlwaysOn Group)
- 【python自动化办公02】word操作-word转pdf
- elementui el-drawer去除自带黑色边框、允许滚动(亲测有效)
- Draft-微软出品的云原生下的本地开发辅助工具