我们要用scrapy抓取企业名录网站的企业信息,并且保存在mysql数据库中,数据大概是22万条,我们用scrapy抓取。

第一步,现在item中定义好要抓取的字段

import scrapy

class RepairSpiderItem(scrapy.Item):
city_name = scrapy.Field()
area_name = scrapy.Field()
company_name = scrapy.Field()
company_address = scrapy.Field()
phone = scrapy.Field()
mobile_phone = scrapy.Field()

第二步,定义spider的抓取逻辑。

    def start_requests(self):
url = 'http://xiu.iqixiu.cn/'
yield Request(url=url,callback=self.parse) def parse(self, response):
html1 = etree.HTML(response.text)
tr_list = html1.xpath('/html/body/table/tbody/tr') # 得到每一行的元素
for tr in tr_list: # 遍历每一行
td_list = tr.xpath('./td[2]/font') # 去除
for td in td_list:
href = td.xpath('./a/@href')[0]
print('href:', href)
href_url = 'http://xiu.iqixiu.cn/' + str(href.replace('{', '%7B').replace('}', '%7D'))
print('href_url:', href_url)
yield Request(url=href_url, callback=self.parse_dail)
def parse_dail(self,response):
html = etree.HTML(response.text)
tr_list = html.xpath(r'//table/tbody/tr')
for tr in tr_list[2:]:
# 获取这一行所有得文本内容
name_tr = tr.xpath('string()')
# 将这一行字符串处理,得到一个列表,这样我们可以得到比如地址,电话这些信息,直接用列表下标取出来就可以了
name_list = name_tr.replace(' ', '').replace('\r', '').split('\n')
print(name_list)
# 去除里面得文本属性值,并字符串处理。因为列表里得文本不全,这个文本属性值比较全
print(tr.xpath('./td[4]/@*')[-1].replace("'", ''))
if '名称' in tr_list[1].xpath('string()').replace(' ', '').replace('\r', '').split('\n')[3]:
city_name = tr_list[0].xpath('string()').split('市')[0]+'市'
area_name = name_list[2]
if tr.xpath('./td[3]/@*')[-1].replace("'", '') == 'nowrap':
company_name = name_list[3]
else:
company_name = tr.xpath('./td[3]/@*')[-1].replace("'", '')
company_address = name_list[4]
phone = name_list[5]
mobile_phone = name_list[6]
#实例化字典存储对象
Repair_item= RepairSpiderItem()
Repair_item['city_name'] = city_name
Repair_item['area_name'] = area_name
Repair_item['company_name'] = company_name
Repair_item['company_address'] = company_address
Repair_item['phone'] = phone
Repair_item['mobile_phone'] = mobile_phone
yield Repair_item
else:
city_name = name_list[2]
area_name = name_list[3]
company_name = tr.xpath('./td[4]/@*')[-1].replace("'", '')
company_address = name_list[5]
phone = name_list[6]
mobile_phone = name_list[7]
# 实例化字典存储对象
Repair_item = RepairSpiderItem()
Repair_item['city_name'] = city_name
Repair_item['area_name'] = area_name
Repair_item['company_name'] = company_name
Repair_item['company_address'] = company_address
Repair_item['phone'] = phone
Repair_item['mobile_phone'] = mobile_phone
yield Repair_item

第三步,在setting里把保存的管道打通。也就是把默认的67,68行被注释的给解开

ITEM_PIPELINES = {
'repair_spider.pipelines.RepairSpiderPipeline': 300,
}

第四步,在pipelines中定义存储

import pymysql

class RepairSpiderPipeline(object):
def __init__(self):
self.coon = pymysql.connect(host='193.112.180.37', user='root', password='***********', port=3306, db='*********')
self.cursor = self.coon.cursor()
self.cursor.execute("create table IF NOT EXISTS klkl_Service_shop(city_name char(50), area_name char(50), company_name char(100), company_address char(100), phone char(50), mobile_phone char(50));")
self.coon.commit() def process_item(self, item, spider):
sql = 'insert into klkl_Service_shop(city_name,area_name,company_name,company_address,phone,mobile_phone) values (%s,%s,%s,%s,%s,%s)'
try:
self.coon.ping(reconnect=True)
self.cursor.execute(sql, (item['city_name'], item['area_name'], item['company_name'], item['company_address'], item['phone'],item['mobile_phone']))
self.coon.commit()
print('klkl_Service_shop提交成功')
except:
self.coon.rollback()
print('klkl_Service_shop提交失败')
return item

scrapy抓取企业名录的更多相关文章

  1. 通过Scrapy抓取QQ空间

    毕业设计题目就是用Scrapy抓取QQ空间的数据,最近毕业设计弄完了,来总结以下: 首先是模拟登录的问题: 由于Tencent对模拟登录比较讨厌,各个防备,而本人能力有限,所以做的最简单的,手动登录后 ...

  2. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)

    老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...

  3. scrapy抓取淘宝女郎

    scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找 ...

  4. scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

    本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visua ...

  5. scrapy抓取的中文结果乱码解决办法

    使用scrapy抓取的结果,中文默认是Unicode,无法显示中文. 中文默认是Unicode,如: \u5317\u4eac\u5927\u5b66 在setting文件中设置: FEED_EXPO ...

  6. 分布式爬虫:使用Scrapy抓取数据

    分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...

  7. 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题

    注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...

  8. scrapy抓取中国新闻网新闻

    目标说明 利用scrapy抓取中新网新闻,关于自然灾害滑坡的全部国内新闻:要求主题为滑坡类新闻,包含灾害造成的经济损失等相关内容,并结合textrank算法,得到每篇新闻的关键词,便于后续文本挖掘分析 ...

  9. scrapy抓取斗鱼APP主播信息

    如何进行APP抓包 首先确保手机和电脑连接的是同一个局域网(通过路由器转发的网络,校园网好像还有些问题). 1.安装抓包工具Fiddler,并进行配置 Tools>>options> ...

随机推荐

  1. Mac 设置git命令tab自动补全(亲测有效)

    转载 :https://blog.csdn.net/tiancaijyy/article/details/84888868 注意: 获取git-completion.bash  要对应自己的git版本 ...

  2. mooc-IDEA 项目/文件之间跳转--002

    二.IntelliJ IDEA -项目之间跳转 1.Next Project Window :跳转到下一个项目 [ ctrl+alt+) ] 2.Previous Project Window:跳转到 ...

  3. python+selenium下拉列表option对象操作方法二

    options = driver.find_elements_by_tag_name('option')                               #获取所有的option子元素 o ...

  4. QT中使用Event Filter监听button事件,Release后button不见

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/27201043 问题RT,在程序中我使用 ...

  5. RMAN备份与恢复 —— 完全恢复与不完全恢复

    名词解释: 顾名思义,完全恢复就是指数据没有丢失的恢复了.不完全恢复是指恢复后有部分数据丢失.它们是数据库的两种恢复方式.        完全恢复:利用重做日志或增量备份将数据块恢复到最接近当前时间的 ...

  6. MVC框架与MTC框架

    3.WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理 ############## ...

  7. ansible组

    安装公钥:服务器互通需要公钥和秘钥 https://www.cnblogs.com/yaozhiqiang/p/9951606.html 配置完成pulic ssh key(公钥和秘钥)之后 进入/e ...

  8. k3 cloud套打模板中绑定加税合价字段的时候数据都为空,不绑定的时候显示正常

    检查bos中加税合计字段,是不是关联币别绑定错误

  9. 20191126PHP连接数据(1)

    引进数据 mysql> create database stu1 character set utf8; mysql> use stu1 mysql> set names utf8; ...

  10. 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)

    本章主要内容是利用mqtt.多线程.队列实现模型一次加载,批量图片识别分类功能 目录结构如下: mqtt连接及多线程队列管理 MqttManager.py # -*- coding:utf8 -*- ...