项目介绍

中国海洋石油是爬取的第一个企业,之后依次爬取了,国家电网,中国邮政,这三家公司的源码并没有多大难度,

采购信息地址:

国家电网电子商务平台

http://ecp.sgcc.com.cn/project_list.jsp?site=global&column_code=014001001&project_type=1

中国海洋石油集团有限公司

https://buy.cnooc.com.cn/cbjyweb/001/001001/moreinfo.html

中国邮政

http://www.chinapost.com.cn/html1/category/181313/7294-1.htm

项目地址:

https://github.com/code-return/Crawl_faw

实现过程与方法

1.中国海洋石油集团有限公司

中海油的信息页面很友好,并没有多大难度,实现顺序如下:

#获取首页内容
def get_one_page(url):...#解析网页
def parse_one_page(html):...#获取最大页码
def getMaxpage(html):...#获取二级页面的文本内容
def getContent(url):...#主函数
def main():url = "https://buy.cnooc.com.cn/cbjyweb/001/001001/moreinfo.html"html = get_one_page(url)parse_one_page(html)page_num = getMaxpage(html)#拼接翻页的url,并返回翻页的源代码for i in range(2,page_num + 1):next_url = url.replace('moreinfo',str(i))next_html = get_one_page(next_url)parse_one_page(next_html)

 在主函数中需实现翻页爬取的功能,这里通过先获取网页最大页码,然后根据页码设置循环,我们从第二页开始解析网页。

在网页解析函数parse_one_page(html)中,主要实现,获取网页中的标题,发布时间,href,获取该内容之后对数据进行筛选,存储

def time_restrant(date): # 时间判断函数,判断是否当年发布的消息thisYear = int(datetime.date.today().year)  thisMonth = int(datetime.date.today().month)thisday = int(datetime.date.today().day)year = int(date.split('-')[0])month = int(date.split('-')[1])day = int(date.split('-')[2])#if ((thisYear - year <= 1) or (thisYear - year == 2 and month >= thisMonth)):  # 爬取24个月内的信息# if (thisYear == year and month == thisMonth and day == thisday):  # 这里是设置时间的地方#if (thisYear == year and month == thisMonth): if (thisYear == year):#if thisYear == year:return Trueelse:return False

def title_restraint(title,car_count, true_count):  # 标题判断函数,判断标题中是否有所需要的“车”的内容global most_kw_arrglobal pos_kw_arrglobal neg_kw_arrcar_count += 1if title.find(u"车") == -1:  # or title.find(u"采购公告"):return False,car_count, true_countelse:#car_count += 1neg_sign = 0pos_sign = 0for neg_i in neg_kw_arr:if title.find(neg_i) != -1:  # 出现了d_neg_kw中的词neg_sign = 1breakfor pos_i in pos_kw_arr:if title.find(pos_i) != -1:  # 出现了d_pos_kw中的词pos_sign = 1breakif neg_sign == 1:return False,car_count, true_countelse:if pos_sign == 0:return False,car_count, true_countelif pos_sign == 1:true_count += 1return True,car_count, true_count

  将数据筛选完毕之后,对数据进行存储

def store(title, date, content, province, url): # 向nbd_message表存储车的信息title, content = removeSingleQuote(title, content)sql = "insert into nbd_message (title,time,content,province,href) values('%s','%s','%s','%s','%s')" % (title, date, content, province, url)return mySQL("pydb", sql, title, date, province)def store_nbd_log(car_count, true_count, province_file): # 向nbd_spider_log表存储爬取日志信息sql = "insert into nbd_spider_log (total_num,get_num,pro_name,spider_time) values('%d','%d','%s','%s')" % (car_count, true_count, province_file,str(datetime.date.today())

  流程结束

2.中国邮政

邮政的页面更加单一,但是邮政问题在于,

其每个单位都有单独的链接来展示其不同业务部门的招标信息,经过对比我发现,这个下属部门的首页链接,就差了最后一点不一样,因此我偷了个懒,多加了个循环

def main():"""urls中分别对应着集团公司,省邮政分公司,邮政储蓄银行,中邮保险,集团公司直属单位"""urls = ['7294-','7331-','7338-','7345-','7360-']for i in range(0,len(urls)):strPost = '1.htm'#url后缀base_url = "http://www.chinapost.com.cn/html1/category/181313/" + str(urls[i])url = base_url + strPosthtml = get_one_page(url)# print(html)parse_one_page(html)page_num = getMaxpage(html)getMaxpage(html)for i in range(2,page_num + 1):next_url = base_url + strPost.replace('1',str(page_num))next_html = get_one_page(next_url)parse_one_page(next_html)

 邮政完成

3.国家电网

国家电网是我遇到的第一个问题,他的问题在于,在所需要的每个公告里面的href中,给出的不是通常的二级页面链接,而是JavaScript的两个参数,

href=”javascript:void(0);”这个的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址,
而void(0)表示一个空的方法,也就是不执行js函数。
为什么要使用href=”javascript:void(0);”
javascript:是伪协议,表示url的内容通过javascript执行。void(0)表示不作任何操作,这样会防止链接跳转到其他页面。这么做往往是为了保留链接的样式,但不让链接执行实际操作,<a href="javascript:void(0)" onClick="window.open()"> 点击链接后,页面不动,只打开链接<a href="#" οnclick="javascript:return false;"> 作用一样,但不同浏览器会有差异

 而二级页面的链接与属性onclick里面的两个数字有关!!!因此我用onclick的两个参数,进行二级页面的拼接,

 hrefAttr = selector.xpath("//*[@class='content']/div/table[@class='font02 tab_padd8']/tr/td/a/@onclick")for i in range(0,len(hrefAttr)):#获取二级页面的跳转参数,以便进行二级页面url拼接string = str(hrefAttr[i])attr1 = re.findall("\d+",string)[0]attr2 = re.findall("\d+",string)[1]

 

结语

继续搬砖......

转载于:https://www.cnblogs.com/bep-feijin/p/10608295.html

Python爬虫与一汽项目【一】爬取中海油,邮政,国家电网问题总结相关推荐

  1. Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)

    Python新手爬虫训练小项目<爬取彼岸图网>(超详细讲解版) 这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频 ...

  2. python爬虫之股票数据定向爬取

    python爬虫之股票数据定向爬取 功能描述 目标:获取上交所和深交所所有股票的名称和交易的信息 输出:保存到文件中 技术路线:requests-bs4-re 前期分析 选取原则:股票的信息静态存在H ...

  3. python项目开发案例集锦 豆瓣-Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评...

    前面爬完网站信息图片之后,今天的又有了个小目标,最近的电影哪吒很火,去豆瓣上看了一下 影评,决定了今天主要是实现Python第三个项目:爬取豆瓣<哪吒之魔童降世> 短评,然后下载在exce ...

  4. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  9. Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

    Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...

  10. Python爬虫笔记(3)- 爬取丁香园留言

    Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...

最新文章

  1. python windows下的file()
  2. 难道我的事,又要落空么。。。
  3. winphone8更换帐号问题的几点说明
  4. 欢乐纪中某B组赛【2018.12.15】
  5. 深入并发包-ConcurrentHashMap
  6. [Leedcode][第215题][JAVA][数组中的第K个最大元素][快排][优先队列]
  7. 调节e18-d80nk的测量距离_地坪研磨机磨盘平整度的调节方法及好处
  8. (转)基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用...
  9. Tokenview:交易所比特币净流出量大幅增加
  10. ES6进阶Async与Await,你不知道的同步与异步
  11. C语言-十进制转换为二进制函数
  12. Ubuntu下利用python实现自动打卡系统全过程
  13. python用均值填充空值_用平均值填充空值
  14. ue4蓝图运行顺序_如何从零基础慢慢学习到UE4的顺序?
  15. 简单基于tun实现的用户态NAT64
  16. html页面会出现浏览器崩溃,Chrome浏览器所有页面全部崩溃解决办法。
  17. 戴尔d系列服务器,戴尔科技集团推出两款全新VxRail产品
  18. 加快SP3下载速度并使用第三方系统主题!适用于XP SP3的TCPIP连接数与主题破解增强补丁下载...
  19. 网络知识基础篇(网络分层和IP地址)
  20. 10个最佳企业移动支付APP应用和酷站欣赏

热门文章

  1. java电信计费项目论文_毕业论文-基于JAVA开发的电信IP计费系统3.doc
  2. Ubuntu 16.04 设置菜单栏位置
  3. 阴阳师服务器维护3月25日,阴阳师3月25日体验服更新 追月神新皮肤上架
  4. lua服务执行过程中协程的挂起和重新唤醒
  5. 小白也能读懂的机器学习入门指南
  6. 西工大NOJ数据结构理论——018.建立二叉树的二叉链表(严6.65)
  7. MySQL数据库学习——啥是SQL语句?
  8. ggplot2画图换字体
  9. Datawhale组队学习(Pandas) task2-pandas基础
  10. JSP导出excel时中文乱码的问题