天行健,君子以自强不息;地势坤,君子以厚德载物!


好了废话不多说,正式进入主题,前段时间应朋友的请求,爬取了某铝业网站上的数据。刚开始呢,还是挺不愿意的(主要是自己没有完整的爬取过网上的数据哎,即是不自信),但是在兄弟伙的面前不能丢脸卅,硬起头皮都要上,于是乎答应了他,好吧~~~~


我们的爬取目标:

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('&nbsp;</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转页爬取某铝业网站上的数据的更多相关文章

  1. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  2. 04 Python网络爬虫 <<爬取get/post请求的页面数据>>之requests模块

    一. urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib ...

  3. Scrapy实战篇(七)之爬取爱基金网站基金业绩数据

    本篇我们以scrapy+selelum的方式来爬取爱基金网站(http://fund.10jqka.com.cn/datacenter/jz/)的基金业绩数据. 思路:我们以http://fund.1 ...

  4. 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪

    #通过输入的关键字,爬取北京地区某岗位的平均月薪 # -*- coding: utf-8 -*- import re import requests import time import lxml.h ...

  5. Python 2.7_爬取妹子图网站单页测试图片_20170114

    1.url= http://www.mzitu.com/74100/x,2为1到23的值 2.用到模块 os 创建文件目录; re模块正则匹配目录名 图片下载地址; time模块 限制下载时间;req ...

  6. python+xpath+requests爬取维基百科历史上的今天

    import requests import urllib.parse import datetime from lxml import etree fhout = open("result ...

  7. [代码]--python爬虫联系--爬取成语

    闲来无事,玩了个成语接龙,于是就想用python爬取下成语网站上的成语,直接上代码: #coding=utf-8 import requests from bs4 import BeautifulSo ...

  8. Python爬虫《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  9. [Python]爬取 游民星空网站 每周精选壁纸(1080高清壁纸) 网络爬虫

    一.检查 首先进入该网站的https://www.gamersky.com/robots.txt页面 给出提示: 弹出错误页面 注: 网络爬虫:自动或人工识别robots.txt,再进行内容爬取 约束 ...

随机推荐

  1. spring 5.1.2 mvc RequestMappingHandlerMapping 源码初始化过程

    RequestMappingHandlerMapping getMappingForMethod RequestMappingHandlerMapping 继承于 AbstractHandlerMet ...

  2. ps修改图片文字

    原图(机密内容以打马赛克): 需要修改的地方: 1.去除蓝色的线条, 2.改表格的字体 操作: 1.去线条 放大图片,使用魔棒工具选中蓝色点,调节容差,取消连续,然后填充白色,ctrl+delete ...

  3. Missing initializer in const declaration

    这是一个 JS 的报错. 如果你要声明一个常量,必须要赋初值.否则就会报错. 比如这样就可以触发这个报错: const foo; 或者 const bar = xxx; 等号右侧由于拼写失误导致的js ...

  4. 网络操作系统 第七章 管理TCP/IP网络

    本章小结 本章介绍了TCP/IP的相关概念,并且在此处基础上,介绍了Windows Server 2008中使用TCP/IP网络配置工具实现网络连接和管理的方法,在Linux系统中,讲解了是如何使用图 ...

  5. Java变成思想--多线程

    Executor :线程池 CatchedThreadPool:创建与所需数量相同的线程,在回收旧线程是停止创建新县城. FixedThreadPool:创建一定数量的线程,所有任务公用这些线程. S ...

  6. [转] 分代垃圾回收的 新旧代引用问题(原标题:Back To Basics: Generational Garbage Collection)

    原文链接: https://blogs.msdn.microsoft.com/abhinaba/2009/03/02/back-to-basics-generational-garbage-colle ...

  7. python 上传文件

    上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件.现在把经验记录下来,下次有类似的需求能提高开发效率. 我使用的是网宿CDN,没有用网宿的SDK ...

  8. [转]Comparing sFlow and NetFlow in a vSwitch

    As virtualization shifts the network edge from top of rack switches to software virtual switches run ...

  9. 【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)

    DocFX 入门 1. DocFX 是什么? DocFX 是一个基于.NET的API文档生成器,当前支持 C# 和 VB. 它可以通过你的代码中的三斜杠注释生成 API 参考文档.同样也支持你使用 M ...

  10. 安全圈玩起了直播,"学霸”带你玩转CTF

    [i春秋]安全圈玩起了直播,"学霸”带你玩转CTF 跟着学霸(汪神)打CTF,摸清CTF套路 汪神,是浙江大学电气工程系的“风云人物”,曾因首度破解特斯拉汽车安全系统而名声大噪.本套题目是自 ...