scrapy抓取企业名录
我们要用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抓取企业名录的更多相关文章
- 通过Scrapy抓取QQ空间
毕业设计题目就是用Scrapy抓取QQ空间的数据,最近毕业设计弄完了,来总结以下: 首先是模拟登录的问题: 由于Tencent对模拟登录比较讨厌,各个防备,而本人能力有限,所以做的最简单的,手动登录后 ...
- python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...
- scrapy抓取淘宝女郎
scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找 ...
- scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立
本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visua ...
- scrapy抓取的中文结果乱码解决办法
使用scrapy抓取的结果,中文默认是Unicode,无法显示中文. 中文默认是Unicode,如: \u5317\u4eac\u5927\u5b66 在setting文件中设置: FEED_EXPO ...
- 分布式爬虫:使用Scrapy抓取数据
分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...
- 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题
注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...
- scrapy抓取中国新闻网新闻
目标说明 利用scrapy抓取中新网新闻,关于自然灾害滑坡的全部国内新闻:要求主题为滑坡类新闻,包含灾害造成的经济损失等相关内容,并结合textrank算法,得到每篇新闻的关键词,便于后续文本挖掘分析 ...
- scrapy抓取斗鱼APP主播信息
如何进行APP抓包 首先确保手机和电脑连接的是同一个局域网(通过路由器转发的网络,校园网好像还有些问题). 1.安装抓包工具Fiddler,并进行配置 Tools>>options> ...
随机推荐
- AWS Cloud Practioner 官方课程笔记 - Part 2
4. AWS Architecture 设计的5个柱子,也就是5大考量点, Security, Reliability, Performance Efficiency, Cost optimizati ...
- 推荐 33 个 IDEA 最牛配置,写代码太爽了!
作者:琦彦 blog.csdn.net/fly910905/article/details/77868300 1.设置maven 1.在File->settings->搜索maven 2. ...
- 洛谷 P2024 [NOI2001]食物链(种类并查集,加权并查集)
传送门 解题思路 加权并查集: 什么是加权并查集? 就是记录着每个节点到它的父亲的信息(权值等). 难点:在路径压缩和合并节点时把本节点到父亲的权值转化为到根节点的权值 怎么转化呢? 每道题都不一样Q ...
- 【题解】Shortest Cycle
原题链接:CF1205B 题目大意 给定\(n\)个整数\(a_1,a_2,a_3, \dots ,a_n\),若\(i \neq j\)且\(a_i \land a_j \neq 0\),则 ...
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
<哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...
- python学习第四十四天斐波那契数列和yield关键词使用
斐波那契数列是数学中的常见的算法,第一个第二个不算,从第三个开始,每个数的都是前面两个数的和,使用yield关键词把生成的数列保存起来,调用的时候再调用,下面举例说明一下 def fab(max): ...
- MATLAB:非线性规划fmincon
1.非线性规划的形式: 其中x是一个列向量,st中前两项为线性约束条件,后两项为非线性约束条件. 在MATLAB中fmincon是用于求解非线性多远函数的最小值的函数,这里介绍fmincon的其中一种 ...
- 剑指offer学习读书笔记--二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序.请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数. 1 2 8 9 2 4 9 1 ...
- Docker实战部署应用——MySQL5.7
MySQL 部署 拉取MySQL镜像 拉取命令: docker pull mysql:5.7 查看镜像 docker images 创建 MySQL 容器 docker run -id --name= ...
- How to Add Memory, vCPU, Hard Disk to Linux KVM Virtual Machine
ref: https://www.thegeekstuff.com/2015/02/add-memory-cpu-disk-to-kvm-vm/ In our previous article of ...