landchina数据爬取(2020.1.6)

landchina数据爬取

从简书里(https://www.jianshu.com/p/97c7e903acad)学习,爬取本地市19年度的土地出让记录。
python 本来也没太多接触,里面涉及几个方面的内容:

proxy:

这是为了规避大量爬取landchina数据导致被封IP而提及的代理,我这边只是爬取少量,不需要用到。

redis

远程字典服务,之前没有接触,作者用这个应该是为了分布式的爬取,实际上我是不需要的,不过为了了解该知识,也蛮用了一下。

r = redis.Redis(host='127.0.0.1', port=6379, db=0)  # host自己的ip地址

注意要下载Redis-server,并运行,redis官网上没有win版本,需要去github上下载。

chrome driver

这边调用的是chrome 的无界面浏览,下载跟机子上安装的chrome一致的chromedriver,国内淘宝有镜像(http://npm.taobao.org/mirrors/chromedriver/
下载后设置path就好。至于里面的chrome options,headless等方法的变化,按提示改下就好。

chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)  # 打开chrome_headless浏览器

pymongo

这个也是一个nosql,这边没用到,有空再去了解一下mongo。

Beautiful Soup

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

xlwt

这个是python里的一个excel库,查下资料可以现学现用。

get cookie & createHeaders

打开一个网页获得一个cookie,并构造出一个header,用于发送get请求,获取详细的土地供应信息页面。

retry

@retry(tries=5, delay=2) #出错重试5次,延迟2秒

倒不一定用到,后面我把他注释掉,不然一开始再调试的时候,因为有错误,一直跳出新的chromedriver,我还以为是分布式多线程的因素。。。

详细的代码如下:

main1.py

#coding=utf-8
import time
import re
import redis
from bs4 import BeautifulSoup
from selenium import webdriver
import random
import sys
import requests
r = redis.Redis(host='127.0.0.1', port=6379, db=0)  # host自己的ip地址
chrome_options = webdriver.ChromeOptions()
#chrome_options.add_argument('--proxy-server=http://' + proxy)
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)  # 打开chrome_headless浏览器
driver.get('http://www.landchina.com/default.aspx?tabid=263&ComName=default')  # 打开界面
i = 1
l = 0
date_list = []
time.sleep(8)
driver.find_element_by_id('TAB_QueryConditionItem270').click()
def page_zh(i, l):
    # 获取本时间段内的总页数(方法)int(reg[0])
    zys = driver.find_elements_by_css_selector(".pager")
    if (zys != []):
        str = zys[1].text;
        reg = re.findall(r'\d+', str)
        pages = int(reg[0])
        print("总页数为:" + reg[0])
        tds = driver.find_elements_by_css_selector(".pager>input")
        # 清空文本方法
        tds[0].clear()
        tds[0].send_keys(i)
        print("第" + tds[0].get_attribute("value") + "页")
        tds
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值