闲着没事就抓取了下链家网的房源信息,抓取的是北京二手房的信息情况,然后通过网址进行分析,有100页,并且每页的url都是类似的

url = 'https://bj.lianjia.com/ershoufang/pg' + 页数,然后请求是get 请求,所以静态页面,然后依次来进行分析,并且存储在mongodb中,每次插入的时候还是要字符串装换成json格式在进行插入,页面的解析用的是bs,解析很方便,代码用的是单进程,耗时是大致66s,因为怕ip被封,所以在每次页面请求之后都要sleep 1秒。

#-*-coding:utf-8-*-
import urllib
import urllib2
import re
import requests
import json
import lxml
from bs4 import BeautifulSoup
import time
from pymongo import MongoClient from lxml import etree
client = MongoClient('localhost',27017)
db = client.test
House = db.House
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'......',
'Host':'bj.lianjia.com',
'Upgrade-Insecure-Requests':'',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
URL = 'https://bj.lianjia.com/ershoufang/pg'
def download(url):
num_try = 2
while num_try > 0:
num_try -= 1
try:
content = requests.get(url,headers = headers)
return content.text
except urllib2.URLError as e:
print 'Download error',e.reason return None def get_message(url):
html = download(url) soup = BeautifulSoup(html,'html.parser')
prices = soup.find_all('div','priceInfo')
total_price = []
for each in prices:
total_price.append(each.span.string)
address = []
house_types = []
areas = []
towards = []
decorates = []
elevates = []
message = soup.find_all('div',attrs={'class':'houseInfo'})
for each in message:
List = each.get_text().split('|')
address.append(List[0].strip())
house_types.append(List[1].strip())
areas.append(List[2].strip())
towards.append(List[3].strip())
decorates.append(List[4].strip())
if len(List) == 5:
elevates.append("None")
else:
elevates.append(List[5].strip())
for addres,house_type,area,price,toward,decorate,elevate in zip(address,house_types,areas,total_price,towards,decorates,elevates):
mess = "{\"Address\":\"%s\",\"House_type\":\"%s\",\"Area\":\"%s\",\"Price\":\"%s\",\"Toward\":\"%s\",\"Decorate\":\"%s\",\"Elevete\":\"%s\"}"%(addres,house_type,area,price,toward,decorate,elevate)
print mess
message = json.loads(mess)
House.insert(message) if __name__ == '__main__':
t = time.time()
print t
for num in xrange(1,101): url = URL + str(num)
print url
get_message(url)
time.sleep(1)
t1 = time.time()
print 'Total time:'
print t1 - t - 100

最新文章

  1. .NET Nancy 详解(三) Respone 和 ViewEngine
  2. @proprety数组字典字符串用copy和strong区别(深浅拷贝)
  3. BZOJ3993 [SDOI2015]星际战争
  4. linux下expect使用教程
  5. FIR滤波器(1)- 基础知识
  6. Windows Live Writer测试插件
  7. 统计图表类库--libchart使用简介
  8. cgg之类型转换
  9. ViurtualBox配置虚拟机Linux的网络环境
  10. vue-cli项目 build后请求本地static文件中的 json数据,路径不对,报错404处理方法
  11. linux磁盘管理系列一:磁盘配额管理
  12. java第七周动手动脑
  13. 浅谈 CSS 预处理器: 为什么要使用预处理器?
  14. 转: Dubbo远程调用服务框架原理与示例
  15. 解题报告:poj 3070 - 矩阵快速幂简单应用
  16. eclipse基础环境配置和svn、maven的配置以及maven的安装
  17. hdu 1542/1255 Atlantis/覆盖的面积
  18. zepto 基础知识(6)
  19. MyBatis使用动态代理报 invalid bound statement (not found) 错
  20. luogu P1417 烹调方案

热门文章

  1. 【BZOJ4568】幸运数字(线性基,树链剖分,ST表)
  2. NOI2013 矩阵游戏 【数论】
  3. NOIP2016愤怒的小鸟 题解报告 【状压DP】
  4. 使用Empire自动获取域管理员
  5. bzoj2006: [NOI2010]超级钢琴(堆+RMQ)
  6. BMP格式图像读取与存储
  7. HDU 4496 并查集 逆向思维
  8. MongoDB - MongoDB CRUD Operations, Update Documents
  9. ⑦ 设计模式的艺术-13.代理(Proxy)模式
  10. 【BZOJ】3091: 城市旅行 Link-Cut Tree