python爬虫科研数据提取_python爬虫数据提取四之pyquery

1 pyquery

简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便

2 pyquery基本用法

2.1 安装

pip install pyquery

2.2 初始化

字符串初始化

html = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

print(doc('li'))

first item second item third item fourth item fifth 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 = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

print(doc('#container .list li'))

first item second item third item fourth item fifth item

2.4 查找元素

2.4.1 子元素

html = '''

'''

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

lis = items.children()

print(type(lis))

print(lis)

first item second item third item fourth item fifth item

lis = items.children('.active')

print(lis)

third item fourth item

注意:这里的item-0和active是两个类,在html中可以给同一元素设置两个类,中间用空格隔开

2.4.2 父元素

html = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

items = doc('.list')

container = items.parent()

print(type(container))

print(container)

html = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

items = doc('.list')

parents = items.parents()

print(type(parents))

print(parents)

parent = items.parents('.wrap')

print(parent)

2.4.3 兄弟元素

html = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

li = doc('.list .item-0.active')

print(li.siblings())

second itemfirst item fourth item fifth item

可以看到,结果的顺序并不是完全和输入的顺序一致

html = '''

'''

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 = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

li = doc('.item-0.active')

print(li)

third item

多个元素

html = '''

'''

from pyquery import PyQuery as pq

doc = pq(html)

lis = doc('li').items()

print(type(lis))

for li in lis:

print(li)

first item second item third item fourth item fifth item

2.6 获取信息

获取属性

html = '''

'''

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 = '''

'''

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 = '''

'''

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 = '''

'''

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 item third item third item

attr、css

html = '''

'''

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 item third item third 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 = '''

'''

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 item fifth item second item fourth item fifth item second item fourth item second 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()

本科毕业论文,查重率为1.9%,可供大家参考。以python爬虫为背景。Web网页数据挖掘技术在上个世纪80年代早就已经有了初步的研究,随着互联网的迅速开展和大规模数据时代的开展,从“冰山一角”的大量数据中寻找潜在有用的价值信息,数据挖掘技术起到了不可忽视的作用,并成为当下最抢手的钻研热点之一。近年来,该技术快速进步,在工程、医学与科学等多种行业都取得了巨大的成果,其研究价值也随之增高。 随之传统的Web爬虫技术也称为网页机器人或者网页蜘蛛,它是一个对网页数据进行批量的下载的程序。面向传统的Web页面的网络爬虫通常采用的方式是对网页中的超链接关系的对外进行扩展,从而获取整个互联网中页面的信息。基于python的Web爬虫需要对网站中的各个节点之间的进行研究,以便获得整个网站的节点关系图。在网络爬虫开发中,Python是最为普遍运用的设计言语。Python爬虫设计中具备特殊的优势,其丰厚的开源库和优异的代码封装使得Python爬虫逐步成为了潮流。 本次毕业设计就是在这个背景下进行的,主要采用了python语言设计程序,其丰富的库函数能够找出网页的xml结构,并运用正则表达式对数据进行筛选。 最后将数据存入mysql数据库展开保存,方便后续的操作。本文旨在方便考研调剂挖掘,为考研学子以后咨询信息提供了一条更加便捷和可行的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值