Python转页爬取某铝业网站上的数据
天行健,君子以自强不息;地势坤,君子以厚德载物!
好了废话不多说,正式进入主题,前段时间应朋友的请求,爬取了某铝业网站上的数据。刚开始呢,还是挺不愿意的(主要是自己没有完整的爬取过网上的数据哎,即是不自信),但是在兄弟伙的面前不能丢脸卅,硬起头皮都要上,于是乎答应了他,好吧~~~~
我们的爬取目标:
http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_1.htm
1、总共63页,每页有十几条的链接

2、爬取连接里面的数据(主要有产品名称、规格、合同、华东市场、华南市场、西南市场、中原市场、产品报价时间)

3、爬取的数据存为CSV格式
一、网页源代码分析:
1、分析网站每页的网址
第一页的网址:http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_1.html
第二页的网址:http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_2.html
第三页的网址:http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_3.html
依次类推
咱们可以发现第63页的网址是:http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_63.html
2、分析每页网页的源代码
通过查看第一页的网页的源代码,可以发现,第一页上的每天的产品报价的链接。

则,整体思路为:
(1)拼接所有页的网址(http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_1.html);
(2)解析出每页中的数据链接(<A href=/chalco/ywycp/cpbj/webinfo/2018/08/1533256568236442.htm target=_blank>中国铝业2018年8月3日产品报价</A>);
(3)通过链接正则匹配出所需要的数据。
二、Python源码
此次爬取,使用的是request和re包!
__Author__ = "MEET Shen"
import requests
import re
import pandas as pd def get_allpage_url(n):
'''
得到所有页的连接
'''
totalpage_urls=[]
for i in range(n):
i=i+1
url_change_page="http://www.chalco.com.cn/chalco/ywycp/cpbj/A120401web_{0}.htm".format(str(i))
totalpage_urls.append(url_change_page)
return totalpage_urls
url=get_allpage_url(20)
def get_datapage_url(data):
'''
http://www.chalco.com.cn/chalco/ywycp/cpbj/webinfo/2018/06/1530058323659676.htm
/chalco/ywycp/cpbj/webinfo/2018/06/1530058323659676.htm
:return:
'''
#正则表达式进行解析出所有的数据连接
pattern=re.compile('.*?</DIV><DIV class=cpbj-item-xz><A href=(.*?) target=_blank>.*?',re.S)
items=re.findall(pattern,data)
del items[0]
result_url=[]
for i in items:
joint="http://www.chalco.com.cn{0}".format(i)
result_url.append(joint)
items_len=len(items)
return result_url,items_len headers={"User-Agent":'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 '
'Core/1.53.4482.400 QQBrowser/9.7.13001.400'} def get_everypage_data(result_url):
response = requests.get(url=result_url, headers=headers)
data = response.text
pattern=re.compile('.*?<P><STRONG>日历时间:</STRONG>(.*?)</P>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?) </TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
'<TD bgColor=#ffffff>(.*?)</TD>.*?'
,re.S)
items=re.findall(pattern,data)
items1=list(items[0])
items1[7] = items1[7].replace('<p>','')
items1[7] = items1[7].replace('</p>','')
items1[8] = items1[8].replace('<p>','')
items1[8] = items1[8].replace('</p>','')
items1[8] = items1[8].replace(' </P>', '')
items1[5] = items1[5].replace('<FONT size=3 face="Times New Roman">', '')
items1[5] = items1[5].replace('</FONT>', '')
items1[6] = items1[6].replace('<FONT size=3 face="Times New Roman">', '')
items1[6] = items1[6].replace('</FONT>', '')
items1[7] = items1[7].replace('<FONT size=3 face="Times New Roman">', '')
items1[7] = items1[7].replace('</FONT>', '')
items1[8] = items1[8].replace('<FONT size=3 face="Times New Roman">', '')
items1[8] = items1[8].replace('</FONT>', '')
return items1 def get_asignpage_data():
items = []
for i in range(len(url)):
response = requests.get(url=url[i], headers=headers)
data = response.text
result_url,items_len = get_datapage_url(data)
for i in range(items_len):
item=get_everypage_data(result_url[i])
items.append(item)
return items items=get_asignpage_data() #存为CSV格式
import pandas as pd
data=pd.DataFrame(items,columns={'time','产品名称','规格','合同','中铝企业','华东市场','华南市场','西南市场','中原市场'})
print(data)
data.to_csv('C:/Users/Administrator/PycharmProjects/untitled/data/lvye1.csv',sep=',')
三、爬取的最终结果
由于数据不很大,爬取的速度还是能够接受的,最终爬取的数据,且形成的CSV文件如下所示:

笔者还处于学习的状态,如有写得不够专业或有错误的地方,真心希望各位读者前来探讨!!!!!
Python转页爬取某铝业网站上的数据的更多相关文章
- Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据
目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...
- 04 Python网络爬虫 <<爬取get/post请求的页面数据>>之requests模块
一. urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib ...
- Scrapy实战篇(七)之爬取爱基金网站基金业绩数据
本篇我们以scrapy+selelum的方式来爬取爱基金网站(http://fund.10jqka.com.cn/datacenter/jz/)的基金业绩数据. 思路:我们以http://fund.1 ...
- 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪
#通过输入的关键字,爬取北京地区某岗位的平均月薪 # -*- coding: utf-8 -*- import re import requests import time import lxml.h ...
- Python 2.7_爬取妹子图网站单页测试图片_20170114
1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...
- python+xpath+requests爬取维基百科历史上的今天
import requests import urllib.parse import datetime from lxml import etree fhout = open("result ...
- [代码]--python爬虫联系--爬取成语
闲来无事,玩了个成语接龙,于是就想用python爬取下成语网站上的成语,直接上代码: #coding=utf-8 import requests from bs4 import BeautifulSo ...
- Python爬虫《爬取get请求的页面数据》
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- [Python]爬取 游民星空网站 每周精选壁纸(1080高清壁纸) 网络爬虫
一.检查 首先进入该网站的https://www.gamersky.com/robots.txt页面 给出提示: 弹出错误页面 注: 网络爬虫:自动或人工识别robots.txt,再进行内容爬取 约束 ...
随机推荐
- spring 5.1.2 mvc RequestMappingHandlerMapping 源码初始化过程
RequestMappingHandlerMapping getMappingForMethod RequestMappingHandlerMapping 继承于 AbstractHandlerMet ...
- ps修改图片文字
原图(机密内容以打马赛克): 需要修改的地方: 1.去除蓝色的线条, 2.改表格的字体 操作: 1.去线条 放大图片,使用魔棒工具选中蓝色点,调节容差,取消连续,然后填充白色,ctrl+delete ...
- Missing initializer in const declaration
这是一个 JS 的报错. 如果你要声明一个常量,必须要赋初值.否则就会报错. 比如这样就可以触发这个报错: const foo; 或者 const bar = xxx; 等号右侧由于拼写失误导致的js ...
- 网络操作系统 第七章 管理TCP/IP网络
本章小结 本章介绍了TCP/IP的相关概念,并且在此处基础上,介绍了Windows Server 2008中使用TCP/IP网络配置工具实现网络连接和管理的方法,在Linux系统中,讲解了是如何使用图 ...
- Java变成思想--多线程
Executor :线程池 CatchedThreadPool:创建与所需数量相同的线程,在回收旧线程是停止创建新县城. FixedThreadPool:创建一定数量的线程,所有任务公用这些线程. S ...
- [转] 分代垃圾回收的 新旧代引用问题(原标题:Back To Basics: Generational Garbage Collection)
原文链接: https://blogs.msdn.microsoft.com/abhinaba/2009/03/02/back-to-basics-generational-garbage-colle ...
- python 上传文件
上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件.现在把经验记录下来,下次有类似的需求能提高开发效率. 我使用的是网宿CDN,没有用网宿的SDK ...
- [转]Comparing sFlow and NetFlow in a vSwitch
As virtualization shifts the network edge from top of rack switches to software virtual switches run ...
- 【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)
DocFX 入门 1. DocFX 是什么? DocFX 是一个基于.NET的API文档生成器,当前支持 C# 和 VB. 它可以通过你的代码中的三斜杠注释生成 API 参考文档.同样也支持你使用 M ...
- 安全圈玩起了直播,"学霸”带你玩转CTF
[i春秋]安全圈玩起了直播,"学霸”带你玩转CTF 跟着学霸(汪神)打CTF,摸清CTF套路 汪神,是浙江大学电气工程系的“风云人物”,曾因首度破解特斯拉汽车安全系统而名声大噪.本套题目是自 ...