Python爬虫入门教程 15-100 石家庄政民互动数据爬取-阿里云开发者社区

开发者社区> 梦想橡皮擦> 正文

Python爬虫入门教程 15-100 石家庄政民互动数据爬取

简介: 1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的。网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除。
+关注继续查看

1. 石家庄政民互动数据爬取-写在前面

今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的。网址为
http://www.sjz.gov.cn/col/1490066682000/index.html
image

首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除。

2. 石家庄政民互动数据爬取-网页分析

点击更多回复 ,可以查看到相应的数据。
image

数据量很大14万条,,数据爬完,还可以用来学习数据分析,真是nice

image

经过分析之后,找到了列表页面。
数据的爬取这次我们采用的是 selenium ,解析页面采用lxml,数据存储采用pymongo ,关于selenium 你可以去搜索引擎搜索相关的教程,好多的,主要就是打开一个浏览器,然后模拟用户的操作,你可以去系统的学习一下。

3. 石家庄政民互动数据爬取-撸代码

导入必备模块

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from lxml import etree
import pymongo
import time

打开浏览器,获取总页码

这个操作最重要的步骤,你搜索之后就会知道,需要提前下载一个叫做 chromedriver.exe 的东东,然后把他配置好,自行解决去吧~


# 加载浏览器引擎,需要提前下载好 chromedriver.exe 。
browser = webdriver.Chrome()
wait = WebDriverWait(browser,10)

def get_totle_page():
    try:
        # 浏览器跳转
        browser.get("http://www.sjz.gov.cn/zfxxinfolist.jsp?current=1&wid=1&cid=1259811582187")
        # 等待元素加载到
        totle_page = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR,'input[type="hidden"]:nth-child(4)'))
        )
        # 获取属性
        totle = totle_page.get_attribute('value')
        # 获取首页数据,这个地方先不必须
        ##############################
        #get_content()
        ##############################

        return totle
    except TimeoutError:
        return get_totle_page()

上面的代码在测试之后,你会得到如下结果
image

这时候,你已经得到20565这个总页码数目了,只需要进行一系列循环的操作即可,接下来有一个重要的函数,叫做next_page 这个函数里面,需要进行一个模拟用户行为的操作,输入一个页码,然后点击跳转。

def main():
    totle = int(get_totle_page()) # 获取完整页码
    for i in range(2,totle+1):
        print("正在加载第{}页数据".format(i))
        # 获取下一页
        next_page(i)

if __name__ == '__main__':
    print(main())

输入页码,点击跳转

def next_page(page_num):
    try:
        input = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR,"#pageto"))
        )
        submit = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR,"#goPage"))
        )
        input.clear() # 清空文本框
        input.send_keys(page_num)  # 发送页码
        submit.click()  # 点击跳转
        #get_content(page_num)

    except TimeoutException:
        next_page(page_num)

以上代码实现的效果动态演示为

20181022152658798

4. 石家庄政民互动数据爬取-解析页面

可以进行翻页之后,通过browser.page_source 获取网页源码,网页源码通过lxml进行解析。编写相应的方法为

def get_content(page_num=None):
    try:
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "table.tably"))
        )
        html = browser.page_source   # 获取网页源码

        tree = etree.HTML(html)  # 解析

        tables = tree.xpath("//table[@class='tably']")

        for table in tables:

            name = table.xpath("tbody/tr[1]/td[1]/table/tbody/tr[1]/td")[0].text
            public_time = table.xpath("tbody/tr[1]/td[1]/table/tbody/tr[2]/td")[0].text
            to_people = table.xpath("tbody/tr[1]/td[1]/table/tbody/tr[3]/td")[0].text

            content = table.xpath("tbody/tr[1]/td[2]/table/tbody/tr[1]/td")[0].text

            repl_time  =  table.xpath("tbody/tr[2]/td[1]/table/tbody/tr[1]/td")[0].text
            repl_depart = table.xpath("tbody/tr[2]/td[1]/table/tbody/tr[2]/td")[0].text

            repl_content = table.xpath("tbody/tr[2]/td[2]/table/tbody/tr[1]/td")[0].text
            # 清理数据
            consult = {
                "name":name.replace("网友:",""),
                "public_time":public_time.replace("时间:",""),
                "to_people":to_people.replace("留言对象:",""),
                "content":content,
                "repl_time":repl_time.replace("时间:",""),
                "repl_depart":repl_depart.replace("回复部门:",""),
                "repl_content":repl_content
            }
            # 数据存储到mongo里面
            #save_mongo(consult)
    except Exception:  # 这个地方需要特殊说明一下
        print("异常错误X1")
        print("浏览器休息一下")
        time.sleep(60)
        browser.get("http://www.sjz.gov.cn/zfxxinfolist.jsp?current={}&wid=1&cid=1259811582187".format(page_num))
        get_content()

在实际的爬取过程中发现,经过几百页之后,就会限制一下IP,所以当我们捕获页面信息出错,需要暂停一下,等待页面正常之后,在继续爬取数据。

5. 石家庄政民互动数据爬取-数据存储到mongodb里面

爬取到的最终数据,我存储到了mongodb里面,这个就没有什么难度了,我们按照常规的套路编写即可。
image

6. 石家庄政民互动数据爬取-写在最后

由于这次爬取的网站是gov的,所以建议不要用多线程,源码也不发送到github上去了,要不惹祸,如果有任何疑问,请评论。nice boy
她专科学历
27岁从零开始学习c,c++,python编程语言
29岁编写百例教程
30岁掌握10种编程语言,
用自学的经历告诉你,学编程就找梦想橡皮擦

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数据分析博文,记得关注哦~ 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。
9312 0
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
931 0
从零开始构建自己的爬虫代理IP数据库并定期检验IP有效性
从零开始构建自己的代理IP池; 根据代理IP网址抓取新的代理IP; 对历史代理IP有效性验证; python实现
1399 0
Hadoop大数据挖掘从入门到进阶实战
1.概述   大数据时代,数据的存储与挖掘至关重要。企业在追求高可用性、高扩展性及高容错性的大数据处理平台的同时还希望能够降低成本,而Hadoop为实现这些需求提供了解决方案。面对Hadoop的普及和学习热潮,笔者愿意分享自己多年的开发经验,带领读者比较轻松地掌握Hadoop数据挖掘的相关知识。
1644 0
数据挖掘敲门砖--Python爬虫入门
Python爬虫.jpg WHAT 数据挖掘是一门综合的技术,随着Ai的兴起,在国内的需求日渐增大。 数据挖掘的职业方向通常有三个,顺便概要地提一下所需的技能(不仅于此) 数据分析方向:需要数理知识支撑,比如概率论,统计学等 数据挖掘方向:需要懂得主流算法的原理及应用,数据库的原理和操作 科学研究方向:通常是科学家们在深入研究数据挖掘的相关基础理论和算法 但是看完简介,好像和爬虫没什么关系? 接着往下看。
2189 0
Python入门教程:Day01-初识Python
Python简介 Python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面又出现了Java和C#实现的版本Jython和IronPython,以及PyPy、Brython、Pyston等其他实现),可以调用C语言的库函数。
2662 0
基础篇:数据库 SQL 入门教程(一)
基础篇:数据库 SQL 入门教程(一)
23 0
Python爬虫入门教程 6-100 蜂鸟网图片爬取之一
1. 蜂鸟网图片简介 国庆假日结束了,新的工作又开始了,今天我们继续爬取一个网站,这个网站为 http://image.fengniao.com/ ,蜂鸟一个摄影大牛聚集的地方,本教程请用来学习,不要用于商业目的,不出意外,蜂鸟是有版权保护的网站。
1406 0
Python爬虫之简书七日热门数据爬取(异步加载详解)
最近在家干活,好几天没更新了,最近好友程兄也开始写简书了,大家可以多看看,讲的很详细(我毕竟懒);正好碰到他问异步加载的问题,那我今天就已简书七日热门为例,给大家讲讲异步加载的数据怎么爬。
855 0
+关注
梦想橡皮擦
专栏100例写作模式先行者
63
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载