Python3爬取汽车目标经销商数据
时间:2022-05-04
本文章向大家介绍Python3爬取汽车目标经销商数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文采用Python3进行语法编写,Python3与Python2中的函数会有所不同,但是相差不大,具体的问题可以百度找到,因有朋友在做汽车方面的业务,因此需要一些网络数据进行支撑,一个个找会非常的繁琐,因此之前弄了些爬虫数据。这里进行其中一部分爬虫的代码共享。
爬虫效果如下:
首先要定义一些常量
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# by Zason_Zhang
import urllib,urllib.request,json
from pyquery import PyQuery as pq
class Constant():
"""常量"""
NAME = 'name'
DIANMIAN = 'dianmian'
ADDRESS = 'address'
TELEPHONE = 'tel'
进行爬虫爬取
###目的爬取目标用户电话
class AutoDealerCrawler():
def __init__(self):
self.saver = Saver() # 保存
self.index_url = ''
self.entry_url = self.index_url + '/dmzs.aspx?classid=38'
self.province_url = self.entry_url +'&city='
def get_province_list(self):
"""省份"""
page = urllib.request.urlopen(self.entry_url).read()#读页
d = pq(page)
#print d
return[(province_option.text, province_option.get('value'))
for province_option in d('select#ddlCity option')]
def get_name_list(self,province_id):
'''省店'''
css_selector = 'html body form#form1 div#body div.body div#conter div.right div.col1 ul.a01 li span a'
page = urllib.request.urlopen(self.province_url + province_id).read()
d = pq(page)
#print '2222' %d
return [(shop.text,shop.get('href'))
for shop in d(css_selector)]
def get_dealer_info_one_province(self, province, shop_url):
"""省份经销商信息"""
css_selector = 'html body div#body div.body div#conter div.right div.col9a'
css_selectorname = 'html body div#body div.body div#conter div.right div.col9wz2'
page = urllib.request.urlopen(self.index_url +'/' + shop_url).read()
d = pq(page)
dealer_info_list = []
for dealername in d(css_selectorname):
print (dealername.text)
dealer_infoname = {}
dealer_infoname[Constant.NAME] = dealername.text
dealer_info_list.append(dealer_infoname)
for dealer_dt in d(css_selector):
p = dealer_dt.findall('p')#获取标签p
if len(p) >= 3:
dealer_info = {}
print (p[0].text[3:].strip())
print (p[1].text[3:].strip())
print (p[2].text[3:].strip())
dealer_info[Constant.DIANMIAN] = p[0].text[3:].strip()
dealer_info[Constant.TELEPHONE] = p[1].text[3:].strip()
dealer_info[Constant.ADDRESS] = p[2].text[3:].strip()
dealer_info_list.append(dealer_info)
else:
self.error_logger.log(u'城市链接错误:%s' % shop_url)
temp_a = dealer_info_list[0]
temp_b = dealer_info_list[1]
temp_a.update(temp_b)
#print temp_a
dealer_info_list_new = []
dealer_info_list_new.append(temp_a)
self.saver.add(province, dealer_info_list_new)
def get_all_dealer_info(self):
"""经销商信息生成程序"""
for province,province_id in self.get_province_list():
if province_id =='':
print ('')
else:
for shop,shop_url in self.get_name_list(province_id):
self.get_dealer_info_one_province(province, shop_url)
self.saver.commit()
数据存储
class Saver():
"""保存excel"""
def __init__(self):
import xlwt
self.count = 1
self.book = xlwt.Workbook()
self.book_name = u'信息'
self.sheet = self.book.add_sheet(self.book_name)
self.write_header()
def write_header(self):
self.sheet.write(0, 0, u'编号')
self.sheet.write(0, 1, u'省份')
self.sheet.write(0, 2, u'店门')
self.sheet.write(0, 3, u'公司名称')
self.sheet.write(0, 4, u'联系电话')
self.sheet.write(0, 5, u'地址')
def add(self, province, dealer_info_list):
for dealer in dealer_info_list:
self.sheet.write(self.count, 0, self.count)
self.sheet.write(self.count, 1, province)
print (self.count)
print (province)
#print dealer[Constant.DIANMIAN]
self.sheet.write(self.count, 2, dealer[Constant.DIANMIAN])
self.sheet.write(self.count, 3, dealer[Constant.NAME])
self.sheet.write(self.count, 4, dealer[Constant.TELEPHONE])
self.sheet.write(self.count, 5, dealer[Constant.ADDRESS])
self.count += 1
def commit(self):
self.book.save(self.book_name + '.xls')
print (self.book_name + u'已保存')
if __name__ == '__main__':
crawler = AutoDealerCrawler()
crawler.get_all_dealer_info()
- 我的第一次ChIP-seq实践
- SparkStreaming窗口操作
- 史上最全Git使用手册
- 我所理解的 PHP Trait
- 算法 | 数据结构常见的八大排序算法
- 高通量数据下载还能这样操作?
- ofbiz实体引擎(八) 创建表
- ofbiz实体引擎(七) 检查数据源
- ofbiz实体引擎(六) GenericHelper的初始化创建
- ofbiz实体引擎(五) ModelGroupReader
- HBitcoin:C#高级比特币钱包库 - 保护您的财产安全
- ofbiz实体引擎(四) ModelReader的作用
- ofbiz实体引擎(三) GenericDelegator实例化的具体过程
- 机器学习实战 | 第五章:模型保存(持久化)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 蓝桥杯 试题 基础练习 回形取数
- 了解RefreshScope这篇短文就够了
- Educational Codeforces Round 83 (Rated for Div. 2) A~~E
- Codeforces Round #627 (Div. 3) 题解
- 牛客练习赛59 A~~D
- Codeforces Round #628 (Div. 2) A~~D
- AtCoder Beginner Contest 160 A ~ E
- SwiftUI:创建底部导航栏 tabBar
- AtCoder Beginner Contest 168 C
- 关于 Executor 和 ExecutorService
- 【队伍训练】Codeforces Round #660 (Div. 2)
- 【队伍训练2】 AtCoder Beginner Contest 165
- C# 的sql server like 的参数
- sql server 字符串替换函数REPLACE
- sql server 更新两个表的某个字段