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> ...
随机推荐
- 宝塔 windows下apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件
首先我们来看两段对上传目录设置无权限的列子,配置如下: //在宝塔下如用/upload这个路径应用无效,一定要C:/wwwroot/upload才有效果 <Directory "要去掉 ...
- python2.7打印中文乱码的问题解决
一. import sys reload(sys) sys.setdefaultencoding('utf-8') print('测试中文') 二. print(‘我是中国人’) >>&g ...
- [Python3 练习] 009 利用列表隐藏并找到有用的信息
题目:利用列表隐藏并找到有用的信息 (1) 描述 1) 题源 鱼 C 论坛中"小甲鱼"老师出的题 链接地址:第020讲:函数:内嵌函数和闭包 | 课后测试题及答案 2) 修改 题中 ...
- [2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意是说用给定区间内的数字组成周长最大的三角形. 大致做法就是求区间第1大,第2大和第3大然后判 ...
- HDU 1494 题解(DP)
题面: 跑跑卡丁车 Problem Description 跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣.这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加 ...
- CF912E Prime Gift题解(搜索+二分答案)
CF912E Prime Gift题解(搜索+二分答案) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1314956 洛谷题目链接 $ $ CF题目 ...
- 进程通信(multiprocessing.Queue)
from multiprocessing import Queue Queue([maxsize]) 创建共享的进程队列.maxsize是队列中允许的最大项数.如果省略此参数,则无大小限制.底层队列使 ...
- C语言如何使输出的数字对齐
右对齐%numd(num是位数,比如按5位数的长度输出,num为正数则右对齐) #include <stdio.h> int main() { printf(, ); printf(, ) ...
- sqoop简单使用
一,通过sqoop将MySQL里面的数据加载到HDFS 先查看有哪些数据库 查看表person sqoop list-databases --connect jdbc:mysql://ly-p2p4: ...
- 浅谈GC
关于Java中的GC,简单来说就是垃圾收集器自动回收生命周期结束的对象,释放内存. 那么怎样确定对象是否存活呢? 可达性分析算法 现在主流的Java虚拟机大多使用这种可达性分析算法来判断对象是否需要进 ...