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> ...
随机推荐
- linux下安装php扩展的redis
bu要在网上顺便找个redis扩展,一是不安全,而是,别人的redis可能只能new,能连接,但是不保证是否能进行其他操作, 1.百度一下php redis扩展. 搜索到这个网址:http://pec ...
- python爬虫——爬取淘票票正在热映电影
今天正好学习了一下python的爬虫,觉得收获蛮大的,所以写一篇博客帮助想学习爬虫的伙伴们. 这里我就以一个简单地爬取淘票票正在热映电影为例,介绍一下一个爬虫的完整流程. 首先,话不多说,上干货——源 ...
- 聊聊NTLM认证协议
近期发现多家安全媒体发布NTLM协议漏洞的文章.他们越说越术语,越说越官方,如此这般下去,他们写出来到底给谁看?大雅就是俗,让我来一篇俗文.啥是NTLM呢?微软windows系统的用户账号存储密码哈希 ...
- [13期]mysql-root全手工注入写马实例实战
回显方便的小工具
- web 前端2 html css一些小问题技巧
html css一些小问题技巧 1 对于儿子块float后,父亲块如果没内容就不见了,如何让父亲块依然跟随飘起了的儿子块撑起来呢?? 用到的属性after方法 公共方法作为继承即可. 1.1 方法 ...
- vue 上传文件 并以表格形式显示在页面上
先上代码 <label for="file" class="btn">多文件上传</label> <input type=&quo ...
- mybatis如何把session托管给spring
原生mybatis创建SqlSession的流程: SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSes ...
- [2019杭电多校第二场][hdu6601]Keen On Everything But Triangle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意是说用给定区间内的数字组成周长最大的三角形. 大致做法就是求区间第1大,第2大和第3大然后判 ...
- HDU 1880 题解(字符串哈希)
题面: 魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 2019牛客暑期多校训练营(第四场) - K - number - dp
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). ...