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


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


我们的爬取目标:

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. 深入浅出Git教程【转载】转载

    深入浅出Git教程(转载)   目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1 ...

  2. 【慕课网实战】三、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    前置要求: 1)Building Spark using Maven requires Maven 3.3.9 or newer and Java 7+ 2)export MAVEN_OPTS=&qu ...

  3. noip第26课资料

  4. tarjan算法总结

    部分内容引自https://www.cnblogs.com/stxy-ferryman/p/7779347.html Tarjan算法不是一个算法而是一类算法 1.求取强连通分量 强连通分量————有 ...

  5. 打开xmind 8 输入序列号

    XAka34A2rVRYJ4XBIU35UZMUEEF64CMMIYZCK2FZZUQNODEKUHGJLFMSLIQMQUCUBXRENLK6NZL37JXP4PZXQFILMQ2RG5R7G4QN ...

  6. ssh框架 基本整合

    struts的基本配置 <struts> <constant name="struts.devModel" value="true" /> ...

  7. [转] KVM VirtIO paravirtualized drivers: why they matter

    http://www.ilsistemista.net/index.php/virtualization/42-kvm-virtio-paravirtualized-drivers-why-they- ...

  8. 【mysql注入】mysql注入点的技巧整合利用

    [mysql注入]mysql注入点的技巧整合利用 本文转自:i春秋社区 前言: 渗透测试所遇的情况瞬息万变,以不变应万变无谓是经验与技巧的整合 简介: 如下 mysql注入点如果权限较高的话,再知道w ...

  9. Alibaba FastJson 常用方法使用指南

    介绍 FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean. FastJso ...

  10. MyBatis 的 XML 映射文件使用说明

    简介 文档参考地址:http://www.mybatis.org/mybatis-3/zh/index.html MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器 ...