Python爬取网上车市[http://www.cheshi.com/]的数据
- #coding:utf8
- #爬取网上车市[http://www.cheshi.com/]的数据
- import requests, json, time, re, os, sys, time,urllib2,shutil,string
- import threading
- import MySQLdb
- import redis
- from pyquery import PyQuery as pq
- from urlparse import urljoin
- from selenium import webdriver
- #设置utf-8编码格式
- reload(sys)
- sys.setdefaultencoding( "utf-8" )
- #读取文件内容
- def getLines(filename):
- file_object = open(filename,'rb')
- lines = file_object.readlines()
- return lines
- #根据url_name获取url_type_id
- def get_url_type_id(v_url_name):
- #3000 品牌 奥迪
- #4000 奥迪 奥迪A6
- url_type_id = ''
- for line in getLines('/home/shutong/crawl/car/script/brand.ini'):
- line = line.strip()
- url_cate = line.split(',')[1]
- url_name = line.split(',')[2]
- if v_url_name.strip() == url_name.strip():
- url_type_id = line.split(',')[0]
- return url_type_id
- break
- else :
- continue
- return url_type_id
- class ResultData():
- '''数据文件类'''
- def __init__(self,industry_id,url_type_id,url_name,url_value,web_type_id,web_name,date_id):
- self.industry_id = industry_id
- self.url_type_id = url_type_id
- self.url_name = url_name
- self.url_value = url_value
- self.web_type_id = web_type_id
- self.web_name = web_name
- self.date_id = date_id
- def __str__(self):
- return self.industry_id,self.url_type_id,self.url_name,self.url_value,self.web_type_id,self.self.web_name,ResultData.date_id
- class Base(object):
- '''文件保存的基类'''
- def __init__(self,dev_prd_flag):
- self.dev_prd_flag = dev_prd_flag
- pass
- #print "This is init function"
- #保存数据到文件文件
- def _saveContext(self,filename,*name):
- format = '^'
- context = name[0]
- for i in name[1:]:
- context = context + format + str(i)
- context = str(context).replace('(','(').replace(')',')').replace(',',',').replace(':',':')
- if self.dev_prd_flag != 'prd':
- print context
- else:
- #去除文件路径名首位空格
- filename = filename.strip()
- #读取目录名称
- path = os.path.dirname(filename)
- #如果目录不存在则创建目录
- if not os.path.exists(path):
- os.makedirs(path)
- #读取文件名称,以追加的方式写文件
- name = os.path.basename(filename)
- fp = open(filename,'a')
- fp.write(context+'\n')
- fp.close()
- def saveData(self,filename,ResultData):
- if ResultData.url_type_id:
- self._saveContext(filename,ResultData.industry_id,ResultData.url_type_id,ResultData.url_name,ResultData.url_value,ResultData.web_type_id,ResultData.web_name,ResultData.date_id)
- else:
- #将数据进行保存在redis中
- r = redis.Redis(host='192.168.122.140',port=6379,db=0)
- r.sadd('errorList',ResultData.industry_id+'^'+ResultData.url_name+'^'+ResultData.url_value)
- def __str__(self):
- return '保存文件的基类'
- class Crawl(Base):
- '''爬虫基础类'''
- driver = None
- #构造方法
- def __init__(self,name,dev_prd_flag):
- super(Crawl,self).__init__(dev_prd_flag='dev')
- self.dev_prd_flag = dev_prd_flag
- self.name = name
- #self.driver = init_driver()
- '''初始化启动浏览器'''
- def init_driver(self):
- ua = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.3 Safari/537.36"
- cap = webdriver.DesiredCapabilities.PHANTOMJS
- cap["phantomjs.page.settings.resourceTimeout"] = 20000
- cap["phantomjs.page.settings.loadImages"] = True
- cap["phantomjs.page.settings.disk-cache"] = True
- cap["phantomjs.page.settings.userAgent"] = ua
- cap["phantomjs.page.customHeaders.User-Agent"] =ua
- cap["phantomjs.page.customHeaders.Referer"] = "http://tj.ac.10086.cn/login/"
- driver = webdriver.PhantomJS(executable_path='/home/shutong/phantomjs/bin/phantomjs',desired_capabilities=cap, service_args=['--ignore-ssl-errors=true'])
- driver.set_page_load_timeout(60)
- driver.set_script_timeout(60)
- #return driver
- self.driver = driver
- #获取网页文本
- def getHtml(self,url,code='utf-8'):
- html = ''
- try:
- if self.driver:
- self.driver.get(url)
- html = self.driver.page_source
- else :
- headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
- request = urllib2.Request(url,headers=headers)
- response = urllib2.urlopen(request,data=None,timeout=60)
- if code:
- if code == 'gbk':
- html = unicode(response.read(),'gbk')
- else:
- html = unicode(response.read(),str(code))
- except:
- pass
- finally:
- return html
- '''析构方法'''
- def __del__(self):
- if self.driver:
- self.driver.quit()
- print "浏览器成功关闭"
- else:
- print "浏览器未打开使用"
- def __str__(self):
- return "爬虫基础类"
- def start_crawl(url):
- #连接redis数据库
- r = redis.Redis(host='192.168.122.140',port=6379,db=0)
- urllist = []
- html = crawl.getHtml(url,'gbk')
- d = pq(html)
- for a in d('a'):
- a = pq(a)
- try:
- url_value = urljoin(url,a.attr('href'))
- name = a.text()
- #if re.compile(r'([a-z]+) ([a-z]+)', re.I)
- #http://newcar.xcar.com.cn/162/
- if re.match( r'http://newcar.xcar.com.cn/[0-9]{1,10}/$', url_value, re.M|re.I):
- #print url_value,name
- #urllist.append(url_value)
- #将数据存储在redis中
- #r.sadd('urllist',url_value)
- pass
- elif re.match(r'http://newcar.xcar.com.cn/m[0-9]{1,10}/$',url_value,re.M|re.I):
- r.sadd('urllist',url_value)
- except:
- pass
- #for index in urllist:
- for index in list(set(urllist)):
- print index
- try:
- #return start_crawl(index)
- pass
- except:
- pass
- def start_wscs_crawl(url):
- #生产或者测试标志 dev为测试 prd为生产
- flag = 'prd'
- #汽车行业ID
- industry_id = ''
- #移动PC端web_type_id
- web_type_id = ''
- #网站名称
- web_name = '网上车市'
- crawl = Crawl('网上车市',flag)
- #加载浏览器
- #crawl.init_driver()
- html = crawl.getHtml(url)
- d = pq(html)
- for div in d('div').filter('.list-box'):
- div = pq(div)
- #品牌
- brand = div('div').filter('.lb').find('span').text()
- #品牌url
- brand_url = urljoin(url,div('div').filter('.lb')('a').attr('href'))
- #print brand,brand_url
- url_type_id = ''
- url_name = brand
- url_value = brand_url
- #保存品牌数据
- #crawl._saveContext(filename,industry_id,url_type_id,url_name,url_value,web_type_id,web_name)
- resultData = ResultData(industry_id,url_type_id,url_name,url_value,web_type_id,web_name,date_id)
- crawl.saveData(filename,resultData)
- brand = div('div').filter('.rb')('dl')('dt')('a').text().replace('>>','')
- brand_url = urljoin(url,div('div').filter('.rb')('dl')('dt')('a').attr('href'))
- #print brand,brand_url
- url_type_id = ''
- url_name = brand
- url_value = brand_url
- #保存品牌数据
- resultData = ResultData(industry_id,url_type_id,url_name,url_value,web_type_id,web_name,date_id)
- crawl.saveData(filename,resultData)
- #crawl._saveContext(filename,industry_id,url_type_id,url_name,url_value,web_type_id,web_name)
- for dd in div('div').filter('.rb')('dl')('dd'):
- dd = pq(dd)
- car_name = dd('div').filter('.con')('h4').text()
- car_url = urljoin(url,dd('div').filter('.con')('h4')('a').attr('href'))
- #print car_name,car_url
- url_type_id = get_url_type_id(car_name)
- url_name = car_name
- url_value = car_url
- #保存车系数据
- #crawl._saveContext(filename,industry_id,url_type_id,url_name,url_value,web_type_id,web_name)
- resultData = ResultData(industry_id,url_type_id,url_name,url_value,web_type_id,web_name,date_id)
- crawl.saveData(filename,resultData)
- #制作汽车实体信息
- #品牌 子品牌 车系名称 价位 图片url 网站名称
- #多线程启动
- def start_mutli_crawl():
- list = []
- for word in string.uppercase:
- #url = 'http://www.autohome.com.cn/grade/carhtml/%s.html' %(word)
- url = 'http://product.cheshi.com/static/selectcar/%s.html?t=1519713137030' % (word)
- list.append(url)
- #定义线程数组
- threads = []
- #创建线程
- for i in range(len(list)):
- t = threading.Thread(target=start_wscs_crawl,args=(list[i],))
- threads.append(t)
- #开启线程
- for i in range(len(list)):
- threads[i].start()
- for i in range(len(list)):
- threads[i].join()
- #filename = '/home/shutong/crawl/car/script/wscs.csv'
- #date_id = '20180227'
- date_id = sys.argv[1]
- filename = sys.argv[2]
- #url = 'http://product.cheshi.com/static/selectcar/B.html?t=1519713137030'
- #start_wscs_crawl(url)
- #多线程启动
- start_mutli_crawl()
Python爬取网上车市[http://www.cheshi.com/]的数据的更多相关文章
- python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...
- Python 爬取 热词并进行分类数据分析-[云图制作+数据导入]
日期:2020.01.28 博客期:136 星期二 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入](本期博客) ...
- python爬取返利网中值得买中的数据
先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy 查找目标数据使用的是beautifulsoup模块. 1.观察网页,寻找规律 打开值得买这块内容 1>分析 ...
- 使用Python爬取、清洗并分析前程无忧的大数据职位
爬取前程无忧的数据(大数据职位) # -*- coding: utf-8 -*- """ Created on Wed Nov 1 14:47:27 2019 @auth ...
- Node.js/Python爬取网上漫画
某个周日晚上偶然发现了<火星异种>这部漫画,便在网上在线看了起来.在看的过程中图片加载很慢,而且有时候还不小心点到广告,大大延缓了我看的进度.后来想到能不能把先把漫画全部抓取到本地再去看. ...
- python爬取网站数据
开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...
- 利用Python爬取豆瓣电影
目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...
- Python爬取LOL英雄皮肤
Python爬取LOL英雄皮肤 Python 爬虫 一 实现分析 在官网上找到英雄皮肤的真实链接,查看多个后发现前缀相同,后面对应为英雄的ID和皮肤的ID,皮肤的ID从00开始顺序递增,而英雄ID跟 ...
随机推荐
- nginx源码完全注释(1)ngx_alloc.h / ngx_alloc.c
首先看 ngx_alloc.h 文件,主要声明或宏定义了 ngx_alloc,ngx_calloc,ngx_memalign,ngx_free. /* * Copyright (C) Igor Sys ...
- SQL Server的聚集索引和非聚集索引
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引)…… (一) ...
- 20-list简单使用:
C++list的使用总结及常用list操作 C++中list用法详解 STL中list的erase()方法的使用 listiterator 最近刚刚接触stl的list 学习的时候遇到了很多 ...
- 面向对象的JavaScript-003
1. // Since JavaScript doesn't exactly have sub-class objects, prototype is a useful workaround to m ...
- jQuery中deferred对象的使用(一)
在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数.同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象. ...
- [C++] NEW Advanced Usage
NEW Advanced Usage 将分配的内存限定在特定的一块区域 #include<iostream> #include<new> ); ); }; using name ...
- JMS 之 Active MQ 的消息传输
本文使用Active MQ5.6 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker,客户端与Active ...
- vi/vim 消除搜索后的关键字高亮
使用vi或vim命令搜索某个关键字之后,取消高亮显示的方法 只要输入:noh即可
- STL中 map 和 multimap
1. 所在头文件<map>. 命名空间std, 声明如下: namespace std{ template <class Key,class T, class Compare = l ...
- 06 Counting Point Mutations
Problem Figure 2. The Hamming distance between these two strings is 7. Mismatched symbols are colore ...