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> ...
随机推荐
- Vue.js 注册组件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (转)http://blog.chinaunix.net/uid-8363656-id-2031644.html CGI 编写
第一章:基础的基础 回CGI教程目录 1.1 为什么使用CGI? 我没有把什么是CGI放在基础篇的第一段,是因为实在很难说明白到底什么是CGI.而如果你先知道CGI有什么作用,将会很好的理解CGI ...
- Hibernate的HQL多表查询
HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...
- spring-data-redis的使用/redis缓存
1.导入依赖 <properties> <junit.version>4.12</junit.version> <spring.version>4.2. ...
- HDU 3228 题解(最小生成树)(Kruskal)(内有详细注释)
Problem Description A group of explorers has found a solitary island. They land on the island and ex ...
- HDU-1873 看病要排队(队列模拟)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 安装paramiko的方法
打开cmd命令行 输入 cd /d C:\Python27\Scripts 输入 pip install paramiko pip install pika -i https://pypi.doub ...
- Git:将本地项目连接到远程(github、gitee、gitlab)仓库流程
当进行协同开发或者为了代码安全备份需要,一般都会将本地代码和远程仓库相连接. 备注:Github.Gitee.Gitlab是三个常用的远程git仓库,操作流程基本一致. 提前环境要求: 1.node. ...
- OPECV的配置
因为要做一点道路是别的东西,所以想用到OPENCV的一些东西.在网上找了一些OPENCCSHARP的代码,但是这方面的书籍或者资料还是不是特别的多,所以我就觉得可能还不是很好.主要的原因还是因为自己的 ...
- 启动ZOOKEEPER之后能查看到进程存在但是查不到状态,是因为。。。
一般我们在启动ZOOKEEPER之后能查看到进程并且能查到每个节点的状态,但是新手偶尔会遇到查不到状态的问题,这里主要说一下我自己遇到的问题. 是因为myid重复了.... 错误:总共三个节点,mas ...