from lxml import etree

import pandas as pd

import requests

import pickle

import sys

import os

def get_page_content(url):

"""链接网页,获取页面内容"""

head = 'http://ttc.seu.edu.cn'

header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',

'referer': 'http://ttc.seu.edu.cn'}

while True:

try:

print(f'\033[1;32m正在下载: {url}\033[0m')

content = requests.get(url, headers=header, timeout=10)

except KeyboardInterrupt:

print('停止获取网页成果,即将退出...')

sys.exit()

except:

print('\033[1;31m网页内容获取失败,重新链接...\033[0m')

continue

break

html = etree.HTML(content.text)

title = html.xpath('//div[@class="article-title-all"]/text()')[0] # 成果标题

# data1 = html.xpath('//dl/*/text()') # 描述属性的标题与内容,内容为空的部分会缺失,没有占位

technical_filed = html.xpath('//dl/dd/span/text()') # 技术领域

technical_filed = ', '.join(technical_filed)

technical_describe = html.xpath('//div[@class="gray-box-no-border resource-big-detail"]/p/text()') # 成果介绍

technical_describe = '
'.join(technical_describe)

content1 = html.xpath('//div[@class="col-sm-6 col-xs-12"]/dl/dd') # 证书,单位,时间,阶段,领域,产权,归属

content2 = html.xpath('//div[@class="col-md-6 col-xs-12"]/div/dl/dd') # 合作,单位介绍

pics = html.xpath('//div[@class="sp-wrap"]/a') # 获取图片节点

pics_link = [head + v.values()[0] for v in [a.attrib for a in pics]] # 获取标签属性里面图片链接,组成列表

pics_links = [', '.join(pics_link)]

contact = html.xpath('//div[@class="gray-box-no-border"]/p/text()') # 联系方式

content1 = [i.text for i in content1]

content2 = [j.text for j in content2]

content1[4] = technical_filed

content = [title] + content1 + [technical_describe] + content2 + contact + pics_links + [url]

save_to_excel(content, title) # 保存获取的内容

def save_to_excel(content,title):

"""把内容保存到excel表格"""

print('保存数据...')

file_name = 'ddcg.xlsx'

keylist = ['成果名称','知识产权证书号','单位名称','发布时间','项目阶段','技术领域','知识产权情况','成果归属','成果介绍',

'项目负责人', '合作方式','转让价格','法人代表','单位规模','单位性质','电话','邮箱','地址','图片链接','原始网页链接']

tem_zip = list(zip(keylist,content))

c = {} # 保存结果

for key, value in tem_zip:

c[key] = [value]

pd_c = pd.DataFrame(c) # 转化为表格数据

if os.path.exists(file_name):

data = pd.read_excel(file_name)

data = pd.concat([data, pd_c])

data.to_excel(file_name, index=False)

print('%s: 追加完毕!' % title)

else:

pd_c.to_excel(file_name, index=False)

print('%s: 保存完毕!' %title)

def get_page_link(list_link):

"""获取页面成果链接以及下一页列表链接"""

head = 'http://ttc.seu.edu.cn'

header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',

'referer': 'http://ttc.seu.edu.cn'}

num = list_link.split('=')[-1]

print(f'正在获取第 {num} 页成果列表...')

while True:

try:

page_data = requests.get(list_link,headers=header,timeout=10)

break

except KeyboardInterrupt:

print('主动退出下载:\n已经下载到:%s' % list_link)

with open('list_link.txt','w') as lobj:

lobj.write(list_link)

except:

print('获取网页错误,重新下载...')

continue

data_xpath = etree.HTML(page_data.text)

cc_list_link = data_xpath.xpath('//a[@class="article-title"]') # 获取成果链接标签元素

alist = [head + link[link.keys()[0]] for link in [d.attrib for d in cc_list_link]] # 得到本页面成果列表链接

# print(alist)

next_list_e = data_xpath.xpath('//nav/ul/li[last()]/a') # 获取下一页链接标签元素

next_list_page_e = [v['href'] for v in [a.attrib for a in next_list_e]][0] # 获取标签的下一页链接内容

# print(next_list_page_e)

get_next_list = head + next_list_page_e if next_list_page_e.startswith('/abutment') else ''

return get_next_list, alist

if __name__ == '__main__':

url = 'http://ttc.seu.edu.cn/abutment/technologyachievementsearch?pageIndex=2'

while True:

next_list_link, cclist = get_page_link(url)

while cclist:

link = cclist.pop()

while True:

try:

get_page_content(link)

with open('download_link.txt','a') as dobj:

dobj.write(link + '\n') # 保存已下载链接

break

except KeyboardInterrupt:

print('主动退出,保存进度...')

with open('cc_list.txt','w') as cobj:

cclist.append(link)

# pickle.dump(cclist,cobj)

cobj.write(cclist)

with open('next_list.txt','w') as lobj:

lobj.write(next_list_link)

exit()

except Exception as e :

print('其他错误。。。', e)

# continue

if next_list_link == '':

print('下载完毕,退出下载...')

for i in ['cc_list.txt','next_list.txt']:

if os.path.exists(i):

os.remove(i)

sys.exit()

url = next_list_link

python etree pandas_python爬虫Xpath,pandas示例相关推荐

  1. python数据分析pandas_Python数据分析之 pandas汇总和计算描述统计

    1. 聚合计算 pandas对象拥有一组常用的数学和统计方法.它们大部分都属于约简和汇总 统计,用于从Series中提取单个值(如sum或mean)或从DataFrame的行或 列中提取一个Serie ...

  2. python 爬虫程序示例,python实现简单爬虫功能的示例

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  3. python数据分析pandas_Python数据分析之pandas学习(基础操作)

    一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组, 除了通吃一维数组可用的函数或方法,而且 ...

  4. Python爬虫——XPath的使用

    Python爬虫--XPath的使用 使用实例一:获取需要的文字 1.导入需要使用的模块 import urllib.request from lxml import etree 2.发送请求访问网站 ...

  5. 表情包(图片)自生产——Python爬虫xpath实现

    文章目录 严正声明:爬虫应严格遵守国家的相关法律法规,坚决做一只文明爬虫 前言 一.知识准备 二.功能解析与实现 1.引入库 2.请求准备 3.发起请求 4.数据解析 5.数据保存 6.成果展示 三. ...

  6. Python爬虫xpath语法及案例使用

    Python爬虫之xpath语法及案例使用 ---- 钢铁侠的知识库 2022.08.15 我们在写Python爬虫时,经常需要对网页提取信息,如果用传统正则表达去写会增加很多工作量,此时需要一种对数 ...

  7. Python 爬虫 xpath 数据解析基本用法

    Python 爬虫 xpath 数据解析基本用法 1. 基本语法 1.1 解析 html 语法 1.2 获取标签 1.3 获取标签中的内容 1.4 获取标签中的属性 1.5 通过内容寻找结点 2. 实 ...

  8. Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用

    Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用 文章目录 Python - 爬虫 - Xpath定位之starts-with()和string( ...

  9. python爬虫小说代码示例-Python从零开始写爬虫-4 解析HTML获取小说正文

    Python从零开始写爬虫-4 解析HTML获取小说正文 在上一节中, 我们已经学会如何获取小说的目录, 这一节我们将学习如何通过正则表达式(在第二节学习过)来获取小说正文. 首先, 先随便选择一个章 ...

最新文章

  1. 遗传算法解决旅行商问题(TSP)
  2. Java.io包中常用的类
  3. Python:一行代码将以e为结尾的科学计算法类型的数值转为小数点类型数值
  4. 19道小米网运维工程师笔试真题
  5. Nacos自定义 namespace与group配置
  6. 前端学习(5):深入了解网站开发
  7. 远程桌面复制文件到本地磁盘
  8. smartupload java_java组件smartupload实现上传文件功能
  9. element ui的upload上传视频内容
  10. 首次启动mysql_MYSQL在centos上首次启动
  11. 9个妙招教你玩转微信
  12. NOI OJ 1.3 11:计算浮点数相除的余数 C语言
  13. Java程序员的魔法杖-Arthas 3.1.2版本发布了
  14. DNS的工作过程详解
  15. 因ubuntu内核升级导致的显卡驱动问题的解决方案
  16. Docker系列 搭建个人云盘服务nextcloud
  17. 如何快速搭建个人网站(服务器配置篇)
  18. 互联网公司晋升利器,只有学会了这些词,你才能在互联网公司混的风生水起!你还不赶紧背下来!
  19. oracle instr函数(oracle 用instr 来代替 like)
  20. 阿德莱德计算机科学专业怎么样,阿德莱德大学计算机专业排名如何 排名多少...

热门文章

  1. Storm入门(0)--流计算
  2. NOIP2018游记题解
  3. nginx 平滑升级
  4. VB.net编码规范(转帖)
  5. python面试题之介绍一下Python中webbrowser的用法
  6. Java获取当前时间及String、datetime、date相互转化
  7. Maven之——使用本地jar包并打包进war包里面的方法
  8. bootstrap与jQuery结合的动态进度条
  9. Airflow 中文文档:API 参考
  10. 【正则化】Label Smoothing详解