python版本:3.7功能描述抓取安居客-郑州各区域内二手房销售信息.代码

# -*- coding: utf-8 -*-
"""
@site: http://www.wangxiaofeng.site
"""
import urllib3
urllib3.disable_warnings()
import sqlite3
import random
import threading
from bs4 import BeautifulSoup# Some User Agents
hds = [{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}, \{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'}, \{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}, \{'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0'}, \{'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'}, \{'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}, \{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}, \{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'}, \{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}, \{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}, \{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'}, \{'User-Agent': 'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11'}, \{'User-Agent': 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11'}]lock = threading.Lock()class SQLiteWraper(object):"""数据库的一个小封装,更好的处理多线程写入"""def __init__(self, path, command='', *args, **kwargs):self.lock = threading.RLock()  # 锁self.path = path  # 数据库连接参数if command != '':conn = self.get_conn()cu = conn.cursor()cu.execute(command)def get_conn(self):conn = sqlite3.connect(self.path)  # ,check_same_thread=False)conn.text_factory = strreturn conndef conn_close(self, conn=None):conn.close()def conn_trans(func):def connection(self, *args, **kwargs):self.lock.acquire()conn = self.get_conn()kwargs['conn'] = connrs = func(self, *args, **kwargs)self.conn_close(conn)self.lock.release()return rsreturn connection@conn_transdef execute(self, command, method_flag=0, conn=None):cu = conn.cursor()try:if not method_flag:cu.execute(command)else:cu.execute(command[0], command[1])conn.commit()except sqlite3.IntegrityError as e:# print ereturn -1except Exception as e:printereturn -2return 0def gen_ershoufang_insert_command(info_dict):"""生成小区数据库插入命令"""info_list = [u'小区名称', u'房屋户型', u'单价', u'位置', u'面积', u'首付', u'年代', u'朝向', u'月供', u'房屋类型', u'楼层', u'装修程度', u'产权年限',u'电梯', u'房本年限', u'产权性质', u'唯一住房']t = []for il in info_list:if il in info_dict:t.append(info_dict[il])else:t.append('')t = tuple(t)commands = (r"insert into anjuhouse values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", t)# commands = (r"insert into anjuhouse values(?,?)", t)return commandsdef ershoufang_spider(db_ershoufang, url_page):"""爬取页面链接中的二手房信息"""try:# print(url_page)http = urllib3.PoolManager()req = http.request('GET', url_page, headers=hds[random.randint(0, len(hds) - 1)])source_code = req.dataplain_text = source_code.decode('utf-8')soup = BeautifulSoup(plain_text, "html.parser")# print(soup)# exitcj_list = soup.findAll('div', {'class': 'houseInfo-content'})info_dict = {}info_dict.update({u'小区名称': cj_list[0].get_text()})info_dict.update({u'房屋户型': cj_list[1].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'单价': cj_list[2].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'位置': cj_list[3].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'面积': cj_list[4].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'首付': cj_list[5].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'年代': cj_list[6].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'朝向': cj_list[7].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'月供': cj_list[8].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'房屋类型': cj_list[9].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'楼层': cj_list[10].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'装修程度': cj_list[11].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'产权年限': cj_list[12].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'电梯': cj_list[13].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'房本年限': cj_list[14].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'产权性质': cj_list[15].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})info_dict.update({u'唯一住房': cj_list[16].text.replace(" ", "").replace("\t", "").replace("\n", "").strip()})commands = gen_ershoufang_insert_command(info_dict)db_ershoufang.execute(commands, 1)# print(cj_list[0].get_text())# exitexcept (urllib3.exceptions.HTTPError, urllib3.exceptions.NewConnectionError) as e:printeexit(-1)except Exception as e:printeexit(-2)def db_ershoufang_spider(db_ershoufang, page = 1):url = u"https://zhengzhou.anjuke.com/sale/p%d/" % page# exit(url)try:http = urllib3.PoolManager()req = http.request('GET', url, headers=hds[random.randint(0, len(hds) - 1)])source_code = req.data# exit(source_code)plain_text = source_code.decode('utf-8')soup = BeautifulSoup(plain_text, "html.parser")list = []for viewlist in soup.findAll('a', {'class': 'houseListTitle'}):list.append(viewlist.get('href'))threads = []print(list)for viewurl in list:t = threading.Thread(target=ershoufang_spider, args=(db_ershoufang, viewurl))threads.append(t)for t in threads:t.start()for t in threads:t.join()except (urllib3.exceptions.HTTPError, urllib3.exceptions.NewConnectionError) as e:printeexit(-3)except Exception as e:printeexit(-4)if __name__ == "__main__":command = "create table if not exists anjuhouse (xiaoqu TEXT, huxing TEXT, danjia TEXT, weizhi TEXT, mianji TEXT, shoufu TEXT, niandai TEXT, chaoxiang TEXT, yuegong TEXT, leixing TEXT, louceng TEXT, zhuangxiu TEXT, chanquan TEXT, dianti TEXT, nianxian TEXT, xingzhi TEXT, weiyi TEXT)"# command = "create table if not exists anjuhouse (xiaoqu TEXT, huxing TEXT)"db_ershoufang = SQLiteWraper('anjuke-ershoufang.db', command)for page in range(1, 50):db_ershoufang_spider(db_ershoufang, page + 1)

结果版权声明文章涉及内容以及代码仅供个人学习使用,请勿用于商业用途.因个人使用不当给其他人员造成的损失以及生成的各法律纠纷,作者概不承担.

python-安居客-郑州二手房销售信息抓取相关推荐

  1. scrapy爬虫实战:安居客深圳二手房

    温馨提示:想要本次爬虫源代码的同学 请关注公众号:python小咖 回复 ' 安居客爬虫 ' 获取源码 --------------------------------- 接下来进入正题 本次爬虫实现 ...

  2. Python3 爬虫实战 — 安居客武汉二手房【requests、Beautiful Soup、CSV】

    爬取时间:2019-10-09 爬取难度:★★☆☆☆☆ 请求链接:https://wuhan.anjuke.com/sale/ 爬取目标:爬取武汉二手房每一条售房信息,包含地理位置.价格.面积等,保存 ...

  3. 安居客无锡二手房数据获取

    安居客无锡二手房 用selenium模拟浏览器抓取 使用requests抓取网页,用bs4解析网页 使用lxml解析网页 (xpath) 网址: https://wuxi.anjuke.com/sal ...

  4. 安居客广州二手房定价分析

    数据 数据爬虫所得,为安居客广州二手房信息,由于数据量不大,所有分析只是针对这个二手房网站上发布的二手房信息所进行的一些简单分析,不能避免偶然性.本人对房价分析亦没什么了解,以下均只是当作数据分析的练 ...

  5. Python基础之12306车票信息抓取案例

    Python基础之12306车票信息抓取案例 注:12306上请求网址链接经常变化,需要随时检查更改(我已经修改三遍了),请求的数据也有小几率发生变动,所以也需要检查更改 2018-10-22 第四遍 ...

  6. python——爬虫实现网页信息抓取

    首先实现关于网页解析.读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用readline方法读某个网站,比如说百度 de ...

  7. python京东图书信息抓取

    import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent #京东图书信息抓取 def get ...

  8. Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程

    Scrapy是一个用于爬行网站以及在数据挖掘.信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架,广泛用于工业. 在本文中我们将建立一个从Hacker News爬取数据的爬虫,并将数据按我 ...

  9. 基于 Scrapy-Redis 全国房源信息抓取系统

    基于 Scrapy-Redis 全国房源信息抓取系统 摘要 近几年,人们对房源信息的关注度越来越高.如何对全国房源信息进行灵活高效的采集并存储,对全国房源信息的分析工作起到重要作用.文中在分析房天下站 ...

  10. Atitit.web的自动化操作与信息抓取 attilax总结

    Atitit.web的自动化操作与信息抓取 attilax总结 1. Web操作自动化工具,可以简单的划分为2大派系: 1.录制回放 2.手工编写0 U' z; D! s2 d/ Q! ^1 2. 常 ...

最新文章

  1. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call
  2. 花33元租号玩2小时王者荣耀,未成年为绕过防沉迷用上黑科技上号器App
  3. MySQL自学2018/05/02-数据类型
  4. 杭电2062java实现
  5. Servlet 生命周期介绍
  6. 揭开.NET 2.0配置之谜(一)
  7. Rabbits —— HDU-6227
  8. IDEA生成可运行jar包
  9. 老板要做DDD改造,我现在慌得一比!
  10. CSDN博客如何转载
  11. 代码快速“检”“修”不是梦,阿里云MaxCompute Studio 2.9.0 新版本发布
  12. 新梦想干货——软件测试中的43个功能测试点(下)
  13. matlab对数坐标的使用
  14. matlab x对数坐标,matlab 对数坐标
  15. 南理工计算机学院宋杰,周骏 - 计算机与信息科学学院 - Powered by 西南大学
  16. 11月合资SUV销量:日系车统治榜单 大众产品攻势“拳意渐乱”
  17. ubuntu下adb连接android手机调试
  18. PDF加密如何加密?分享两个方法给你
  19. 这位程序员的桌面是我见过最漂亮的了
  20. 1186: 零起点学算法93——改革春风吹满地(C)

热门文章

  1. 计算机内存分为几代,电脑内存怎么看大小(内存条怎么看几代型号)
  2. 博客整理:人在运维囧途系列学习目录
  3. Portraiture 3.5.6磨皮滤镜插件适用于Photoshop磨皮美化功能
  4. 计算机游戏 ppt背景图片,课件背景图片大全
  5. 【百度站长工具】使用网站收录工具加速网站收录
  6. ATX电源故障导致某些主板不能启动
  7. 硅基生命之漫谈-1:天马行空
  8. OKR工作法阅读笔记(第一天)-序言和前言
  9. Redis底层数据结构-SDS
  10. 技嘉主板+AMD CPU开启CPU虚拟化方法