#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 奥迪  奥迪A6url_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_idbreakelse :continuereturn url_type_idclass ResultData():'''数据文件类'''def __init__(self,industry_id,url_type_id,url_name,url_value,web_type_id,web_name,date_id):self.industry_id = industry_idself.url_type_id = url_type_idself.url_name = url_nameself.url_value = url_valueself.web_type_id = web_type_idself.web_name = web_nameself.date_id = date_iddef __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_idclass Base(object):'''文件保存的基类'''def __init__(self,dev_prd_flag):self.dev_prd_flag = dev_prd_flagpass #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 contextelse:#去除文件路径名首位空格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_flagself.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.PHANTOMJScap["phantomjs.page.settings.resourceTimeout"] = 20000cap["phantomjs.page.settings.loadImages"] = Truecap["phantomjs.page.settings.disk-cache"] = Truecap["phantomjs.page.settings.userAgent"] = uacap["phantomjs.page.customHeaders.User-Agent"] =uacap["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 driverself.driver = driver#获取网页文本def getHtml(self,url,code='utf-8'):html = ''try:if self.driver:self.driver.get(url)html = self.driver.page_sourceelse :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:passfinally: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 indextry:#return start_crawl(index)pass except:pass def start_wscs_crawl(url):#生产或者测试标志 dev为测试 prd为生产flag = 'prd'#汽车行业IDindustry_id = '004004'#移动PC端web_type_idweb_type_id = '0'#网站名称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()#品牌urlbrand_url = urljoin(url,div('div').filter('.lb')('a').attr('href'))#print brand,brand_urlurl_type_id = '3000'url_name = brandurl_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_urlurl_type_id = '3000'url_name = brandurl_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_urlurl_type_id = get_url_type_id(car_name)url_name = car_nameurl_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()

转载于:https://www.cnblogs.com/Jims2016/p/8554928.html

Python爬取网上车市[http://www.cheshi.com/]的数据相关推荐

  1. Python爬取《权力的游戏第八季》演员数据并分析

    Python爬取<权力的游戏第八季>演员数据并分析 数据爬取 一.浏览待爬取网页 二.爬取百度百科中<权力的游戏第八季度>演员表获得每个演员的链接并保存入文件 三.爬取演员详细 ...

  2. python爬取网上文章_python 爬取微信文章

    本人想搞个采集微信文章的网站,无奈实在从微信本生无法找到入口链接,网上翻看了大量的资料,发现大家的做法总体来说大同小异,都是以搜狗为入口.下文是笔者整理的一份python爬取微信文章的代码,有兴趣的欢 ...

  3. Python爬取近10万条程序员招聘数据,告诉你哪类人才和技能最受热捧!

    来源:凹凸数据 本文约5800字,建议阅读15分钟 本文带你了解当下企业究竟需要招聘什么样的人才?需要什么样的技能? 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于& ...

  4. 利用 Python 爬取了近 3000 条单身女生的数据,究竟她们理想的择偶标准是什么?

    灵感来源与学习:利用 Python 爬取了 13966 条运维招聘信息,我得出了哪些结论? 本文原创作者:壹加柒 本文来源链接:https://blog.csdn.net/yu1300000363/a ...

  5. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  6. python爬取InterfaceLIFT壁纸,下载到本地,数据存入数据库(mysql,mongodb)

    github地址 欢迎star,欢迎拍砖 适用pythopn版本 Python 2.7 or Python 3.6 只在这两个版本之下测试过,正常运行 项目文件说明 main.py 主要文件 mysq ...

  7. python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 1.爬取租房标题 按照惯例,先来爬下标题试试水,找到标题,复制xpath. 多复制几个房屋 ...

  8. python爬取网上租房信息_用python爬取租房网站信息的代码

    自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...

  9. 用python爬取网上的睡前小故事,然后每天给女票发。哈哈哈

    今天看了有人用python爬故事,给女票每天发邮箱过去.看了一下感觉很棒,然后又看了评论,有说要是发微信就更好了. 所以...... 我就做了一个发微信的,哈哈. 先上结果 www.tom61.com ...

最新文章

  1. 字符串操作--宽窄字符转换
  2. 实验三 静态路由、默认路由配置
  3. 风客科技网管培训资料
  4. (原創) 為什麼VB有Dim obj As Foo = New Foo()這種語法? (初級) (Visual BASIC)
  5. 李开复:21世纪最需要的7种人才
  6. 创建你的第一个游戏Pong——概览
  7. python基础 - 字符串与列表的基本操作方法
  8. 月薪30K的软件测试简历怎么包装,软件测试项目经验怎么写?软件测试简历编写,赠软件测试简历模板
  9. oracle触发器实例
  10. fckeditor for java_基于java使用FCKeditor
  11. Ubuntu 搭建Ftp服务器
  12. CMake基础教程(32)文件搜索指令FILE
  13. vue+element 下载or批量下载.mp3文件
  14. 亚控科技的KingSCADA多个漏洞
  15. 一张图囊括所有ASM优化投放知识点
  16. Java高频重点面试题,看这一篇就够了。
  17. python学习_循环语句
  18. linux开启514端口,查看linux服务器所开放的端口
  19. 飞飞cms添加广告html,飞飞影视cms-飞飞cms免费影视站程序
  20. 计算机除尘的操作步骤,PC除尘降温不求人 脚本之家手把手教你如何清理电脑

热门文章

  1. MMORPG游戏的典型架构
  2. tp6 openid获取 JWT中间件
  3. 中国影视IP制作行业投资规划动态及发展趋向分析报告2022-2028年版
  4. c语言指针知识点总结
  5. 20190625 前端开发日报
  6. html中video获取src,HTML Video src用法及代码示例
  7. 氟改性UiO-66|3,4-二羟基苯甲醛改性UiO-66-NH2|喜树碱衍生物/寡肽@ZIF-8纳米载药体系
  8. 【历史上的今天】5 月 9 日:中国黄页上线;Red Hat 创始人出生;Scratch 2.0 发布
  9. 加速度计、陀螺仪工作原理
  10. 微信小程序——自定义组件