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


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


我们的爬取目标:

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. 线程中的队列(queue)

    队列的类型和常用方法 队列是一种数据结构,它类似于列表.但列表是线程不安全的,而队列是线程安全的. python的queue(python3,python2为Queue)提供了3种队列: Queue: ...

  2. redis_字典_哈希hash

    字典.哈希表基本数据结构 redis字典使用哈希表作为底层实现,基本结构就是数组+散列 typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈 ...

  3. liunx_second_day

    liunx-基本权限 1.文件和目录权限的区别 A.文件的权限:所有者,所属组,其他人 rwx,读,写,执行,没有权限就是- 第一组rwx:文件所有者的权限 第二组rwx:文件所属组的权限 第三组rw ...

  4. TCP和UDP的优缺点

    TCP: 优点: 全双工的可靠连接,使得发送的数据有序.不重复.无差错.不丢失,提供的是可靠的服务: 提供确认重传机制.流量控制和拥塞控制,保证网络的稳定可靠性: 缺点: 每次通信都要建立连接,占用系 ...

  5. Thread,ThreadPool,Task

    线程分为前台和后台.比如我们直接new一个Thread这就是前台线程. 前台线程一定会执行. 比如我们创建2个线程:1号,2号,同时执行,假设1号是主线程,1执行完了,依旧会等待2执行完成,整个程序才 ...

  6. 【ProtoBuffer】windows上安装ProtoBuffer3.1.0 (附已编译资源)

    ------- 17.9.17更新  --- 以下这些方法都是扯淡,对我的机器不适用,我后来花了最后成功安装并亲测可用的方法不是靠vs编过的,vs生成的库引入后函数全部报undefine refere ...

  7. 【repost】js window对象属性和方法相关资料整理

    window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...

  8. win10个人助理conrtana软件能否支持用户反馈、后续优化

    上网查找了一下,win10的个人助理不支持用户反馈.这些反馈都是用户通过别的途径来发表反馈的信息,这个缺陷让用户不是特别满意,因为反馈信息不再那么简答,变得越来越繁琐.有些人还会担心自己反馈的问题会不 ...

  9. Java 使用 Jxl 实现 Excel 导入导出

    开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的.这里做一下使用JXL的学习记录.首先需要导入相应的 ...

  10. 从Java到JVM到OS线程睡眠

    Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过 Thread.sleep 使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么. 简单例子 以下是一个简单的例子,使主线程睡眠 ...