**声明:本篇博文只用于对于爬虫技术的学习交流。如果侵犯到相关网站利益,请联系我删除博文。造成不便还请见谅。希望各位同学在学习的时候不要过于频繁的去请求。

最近博主在学习前端开发和网页相关的东西,这些知识和网络爬虫(特别是网页爬取)有很强的联系,然后突然发现爬虫也有很多有趣的地方,所以准备开始系统性地把爬虫那几个包都学一学,用一用。本文展示了两个爬虫案例;意识使用beautifulsoup和requests包对网站的图片进行爬取,并保存到本地;二是从网站循环爬取上市公司高管信息。

目录

1 图片爬取

1.1 背景任务概述

1.2 代码实现

2 从网站循环爬取上市公司高管信息

2.1 任务背景

2.2 过程和代码实现


1 图片爬取

1.1 背景任务概述

  • 利用爬虫将该网页的所有头像类别中的头像文件获取并保存。
  • 分不同文件夹保存,每个类别单独建立文件夹,然后将该类别内所有头像图片爬取并保存在文件夹中;
  • 文件夹命名用原类别名称,图片名截取原图片名中的四个字符;
  • 原类别名称中存在的不能用于文件夹命名的非法字符用‘0’代替;

1.2 代码实现

说明:

使用request.get()函数获取网页的源码;

使用beautifulsoup()对网页源码进行解析(解析成树结构);

使用soup.select()函数对网页中的元素进行CSS定位;

步骤:

如何获取网页元素中的CSS定位

建立文件夹和保存文件时首先判断是否在当前文件夹已经存在要建立的文件夹或文件;

# 导入必要的包
from bs4 import BeautifulSoup
import requests
import os#使用request取到网页的源码
html = requests.get(r"https://www.woyaogexing.com/touxiang/weixin/")
html.encoding = 'utf-8'#使用beautifulsoup对网页源码进行解析
soup = BeautifulSoup(html.text,'lxml')#使用css定位相应语句
image_types = soup.select("#main > div.list-main.mt10.cl > div.list-left.z > div.pMain > div> a.imgTitle")
#创建一级文件夹
newdir = os.getcwd()+r"\爬取图片"
if not os.path.exists(newdir):os.mkdir(newdir)
for image_type in image_types:#创建二级文件夹(将非法字符替换为0)if not os.path.exists((newdir+'\\' +image_type.get_text()).replace(' ','0').replace('/','0').replace('?','0')):os.mkdir((newdir+'\\' +image_type.get_text()).replace(' ','0').replace('/','0').replace('?','0'))#获取图片地址并保存图片html_temp = requests.get(r"https://www.woyaogexing.com" + image_type['href'])html_temp.encoding = 'utf-8'soup_temp = BeautifulSoup(html_temp.text,'lxml')images = soup_temp.select('#main > div.contMain.mt10 > div.contLeft.z > div.contLeftA > ul > li > a > img')for image in images:path = (newdir+'\\' + image_type.get_text() +'\\'+ image['src'].split('/')[-1][0:4] + '.jpg').replace(' ','0').replace('/','0').replace('?','0')r = requests.get('http:'+image['src'])r.raise_for_status()with open(path,'wb') as f:f.write(r.content)f.close()print("保存成功",(image_type.get_text() +'\\'+ image['src'].split('/')[-1][0:4] + '.jpg').replace(' ','0').replace('/','0').replace('?','0'))

结果展示:

2 从网站循环爬取上市公司高管信息

2.1 任务背景

从tushare获取若干上市公司代码列表,观察新浪财经网站的各个上市公司网页URL的规律,并构建循环爬虫,抓取网页源代码,通过XPath提取每条任职信息中高管的姓名、职务、起始日期、终止日期。

2.2 过程和代码实现

1、导入需要的包:

import requests
from lxml import etree
import tushare as ts
import pandas as pd

2、从tushare获取上市企业信息(主要利用上市代码):

mytoken="744f361bc4c1762cd87f0f034ae0a6a5c6de4e2b702e484dc195b3c1"
ts.set_token(mytoken)#设置tushare token
pro = ts.pro_api()#初始化接口
df = pro.stock_basic(exchange='', list_status='L', fields='symbol,name,area,industry,list_date')#获取股票列表数据
stock_sample = df.sample(axis = 0, n = 10)#随机获取十家公司的信息作为爬取对象公司
stock_sample#展示抽取的十家公司

3、观察网页URL:

秦川机床高管信息网页:http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/000837.phtml

迎丰股份高管信息网页:

http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/605055.phtml

浦发银行高管信息网页:

http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/600000.phtml

可以发现每一家公司的这一网页的url前面部分都是相同的,只有后面的数字(公司代码)有所区别,所以我们可以在爬取的时候通过改变后面的数字(公司代码)而访问到不同的信息网页。

4、设置公司都相同的hearder信息和网页上所需信息的Xpath:

#设置所有公司都相同的header信息
headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control":"max-age=0","Connection":"keep-alive","Host":"vip.stock.finance.sina.com.cn","Upgrade-Insecure-Request":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
}
#设置Xpath
name_xpath = "/html/body/div[@class='wrap main_wrap clearfix']/div[@class='R']/div[@id='con02-6']/table[@id='comInfo1']/tbody/tr/td[@class='ccl'][1]/div/a"
job_xpath = "/html/body/div[@class='wrap main_wrap clearfix']/div[@class='R']/div[@id='con02-6']/table[@id='comInfo1']/tbody/tr/td[@class='ccl'][2]/div"
starttime_xpath = "/html/body/div[@class='wrap main_wrap clearfix']/div[@class='R']/div[@id='con02-6']/table[@id='comInfo1']/tbody/tr/td[@class='ccl'][3]/div"
endtime_xpath = "/html/body/div[@class='wrap main_wrap clearfix']/div[@class='R']/div[@id='con02-6']/table[@id='comInfo1']/tbody/tr/td[@class='ccl'][4]/div"
all_name = []
all_job = []
all_starttime = []
all_endtime = []
all_stkid = []
all_stkid_output = []
all_stkname = []
all_stkname_output = []

步骤:

hearder查询和Xpath查询

5、开始循环爬取:

###########循环爬取信息开始
all_stkid = stock_sample.symbol.tolist()#将dataframe数据中的代码部分转化为list
all_stkname = stock_sample.name.tolist()#将dataframe数据中的公司名字部分转化为list
for i in range(0,len(all_stkid)):#输出提示信息print("正在爬取的公司为             "+ all_stkname[i] + "           公司代码是           " + all_stkid[i] )url = "http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/" + all_stkid[i] + ".phtml"print("网址是" + url)html = requests.get(url, headers = headers)#取得网页内容html.encoding = "gb18030"#设置字符编码tree = etree.HTML(html.text)#建立树#使用xpath进行解析name_list = tree.xpath(name_xpath)job_list = tree.xpath(job_xpath)starttime_list = tree.xpath(starttime_xpath)endtime_list = tree.xpath(endtime_xpath)#print(name_list)#print(job_list)#存入list中name_list = [name.text for name in name_list]all_name.extend(name_list)job_list = [job.text for job in job_list]all_job.extend(job_list) starttime_list = [starttime.text for starttime in starttime_list]all_starttime.extend(starttime_list)endtime_list = [endtime.text for endtime in endtime_list]all_endtime.extend(endtime_list)all_stkid_output.extend([all_stkid[i]]*len(name_list))all_stkname_output.extend([all_stkname[i]]*len(name_list))

6、保存到dataframe中并输出到Excel:

#生成输出的字典
data = {"股票代码":all_stkid_output,"股票名称":all_stkname_output,"姓名":all_name,"职务":all_job,"起始时间":all_starttime,"离任时间":all_endtime
}
df = pd.DataFrame(data)#输出到Excel
path = "新浪财经高管任职10家随机.xlsx"
df.to_excel(path)

7、结果:

【爬虫】使用beautifulsoup、requests爬取网页上的图片;循环爬取上市公司高管信息相关推荐

  1. 抓取网页上的图片(一)

    抓取网页上的图片 思路:网页(HTML)中的图片通常在img标签中,图片的链接通常在标签的src属性中,通过BeautifulSoup解析HTML,找到所有的img标签,获取每一个标签中的src的属性 ...

  2. python简单的爬取网页上的图片

    如果需要大量的图片,在网页中一个一个下载,耗费时间太长了,如果可以有程序自动帮我们下载图片,这样就最好了,既快速又方便. 接下来,我将把学习笔记记录如下,以下内容仅仅是突击学习.尽快使用的效果,而对于 ...

  3. 01-windows下python爬取网页上的图片

    1.首先下载python,安装环境 pycharm.anaconda的下载与安装 移步各个主页下载,一键式安装. - pycharm: http://www.jetbrains.com/pycharm ...

  4. java随机抓取网站上的图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

  5. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

  6. 用python爬取动态网页上的图片(百度图片)

    用python爬取动态网页上的图片(百度图片) 参考B站一个视频,视频链接: https://www.bilibili.com/video/BV1Va4y1Y7fK?share_source=copy ...

  7. Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索

    Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索 一.资源 为什么接下来的代码中要使用el.getElementsByTa ...

  8. java抓取网页数据_实现网络图片爬虫,只需5秒快速把整个网页上的图片全下载打包zip...

    我们经常需要用到互联网上的一些共享资源,图片就是资源的一种,怎么把网页上的图片批量下载下来?有时候我们需要把网页上的图片下载下来,但网页上图片那么多,怎么下载我们想要的东西呢,如果这个网页都是我们想要 ...

  9. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

最新文章

  1. mysql字符集查看_查看和设置mysql字符集
  2. 【Laro】- About Game Engine
  3. 03-1.JavaScript基础语法略写/模版字符串
  4. Java重载和重写6_深入理解Java中的重写和重载
  5. C语言笔记(关键字)
  6. 微处理器:50岁了!
  7. 2021“鲜美生活”新趋势:中国食品行业白皮书
  8. byte数组转byte数组 java_Java中文件与字节数组转换
  9. python socket模块 和pyqt_使用PyQt和Socket进行聊天编程[标准库]
  10. Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂
  11. 数据结构经典问题——出栈顺序 转载至:canlynet微博
  12. 修改R语言安装包的默认路径 r包安装位置
  13. swagger注解说明_齐全的swagger注解介绍
  14. 手机显示服务器被重置连接断开,手机服务器链接被重置
  15. 1816. 截断句子【我亦无他唯手熟尔】
  16. EventBus原理与源码解析
  17. 四款软件,提高团队工作效率
  18. 中科院90多科研人员集体辞职后续:已低调处理,被质疑所长新添重要职务
  19. Linux定时清除缓存脚本与清除命令
  20. 基于SSM的演唱会网上订票系统

热门文章

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,Spring全家桶_Part1-2(学学Spring源码呗【两大神器:大管家与个性化产物】、【XmlBeanFactory争风吃醋】)~整起
  2. 苹果android是什么,如果用苹果最新的芯片运行安卓系统会是什么情况?
  3. Excel提取一列的前几位数据
  4. 家电行业如何利用crm客户管理系统提升销售水平?
  5. 笔记本蓝牙不能正常使用解决方案
  6. 中秋节诗句有哪些呢?
  7. 波士顿房价预测——机器学习入门级案例
  8. 【期望】BZOJ4872 [SHOI2017] 分手是祝愿
  9. 关于php数字转大写人民币的代码(完善)
  10. 【清橙A1084】【FFT】快速傅里叶变换