python爬虫案例-陶瓷公司数据爬取
用requests爬取要注意HTTPConnectionPool(host=xxx, port=xxx): Max retries exceeded with url...异常,出现这个异常的解决方法:
①在requests.get()方法前调用 disable_warnings()方法 → requests.packages.urllib3.disable_warnings()
②在reqeusts.get() 方法中设置verify = False。→ response = requests.get(url = url,headers = self.__class__.headers,verify = False)
③在requests.get()方法后设置重试次数。→ requests.adapters.DEFAULT_RETRIES = 5
详细的操作请看代码:
1 # Author:K 2 import requests 3 from lxml import etree 4 import os 5 import csv 6 7 class CompanySpider(object): 8 headers = { 9 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36', 10 'Connection': 'close' 11 } 12 13 def run(self): 14 self.get_urls() 15 16 def get_urls(self): 17 detail_urls = [] 18 for page in range(1,46): 19 url = 'http://gd.taoci163.com/qiye/a440600p%s/FoShanShi.html' % page 20 requests.packages.urllib3.disable_warnings() 21 response = requests.get(url = url,headers = self.__class__.headers,verify = False) 22 requests.adapters.DEFAULT_RETRIES = 5 23 tree = etree.HTML(response.text) 24 detail_urls = tree.xpath('//div[@class="mainLeft"]//li//span/a[1]/@href') 25 self.parse_page(detail_urls) 26 print('page %s over!!!' % page) 27 28 def parse_page(self,urls): 29 for url in urls: 30 data = [] 31 requests.packages.urllib3.disable_warnings() 32 response = requests.get(url = url,headers = self.__class__.headers,verify = False) 33 requests.adapters.DEFAULT_RETRIES = 5 34 tree = etree.HTML(response.text) 35 # 获取公司名称,添加到列表中 36 try: 37 company_name = tree.xpath('//div[@class="conA contact"]/ul/li[1]/span/text()')[0] 38 data.append(company_name) 39 # 获取公司联系人,添加到列表中 40 contacts_name = tree.xpath('//div[@class="conA contact"]/ul/li[2]/span/text()')[0] 41 data.append(contacts_name) 42 # 获取公司地址,添加到列表中 43 company_addr = tree.xpath('//div[@class="conA contact"]/ul/li[3]/span/text()')[0] 44 data.append(company_addr) 45 # 获取公司电话,添加到列表中 46 company_phone = tree.xpath('//div[@class="conA contact"]/ul/li[5]/span/text()')[0] 47 data.append(company_phone) 48 # 获取手机号,添加到列表中 49 mobile_phone = tree.xpath('//div[@class="conA contact"]/ul/li[6]/span/text()')[0] 50 data.append(mobile_phone) 51 # 获取公司传真,添加到列表中 52 company_fax = tree.xpath('//div[@class="conA contact"]/ul/li[7]/span/text()')[0] 53 data.append(company_fax) 54 # 持久化存储 55 self.save_data(data) 56 except Exception as e: 57 print(e) 58 59 def save_data(self,data): 60 writer.writerow(data) 61 62 63 if __name__ == '__main__': 64 if not os.path.exists('H:/陶瓷公司数据'): 65 os.mkdir('H:/陶瓷公司数据') 66 fp = open('H:/陶瓷公司数据/佛山陶瓷公司_test.csv','wt',encoding = 'utf-8-sig') 67 writer = csv.writer(fp) 68 csv_header = ['公司名称','联系人','公司地址','电话','手机','公司传真'] 69 writer.writerow(csv_header) 70 spider = CompanySpider() 71 try: 72 spider.run() 73 except Exception as e: 74 print(e) 75 fp.close()
陶瓷公司数据爬取(requests)
而用scrapy框架的话就方便很多,由于采用异步方式,爬取速度也很快,要注意域名必须写对,很重要!代码如下:
1 # -*- coding: utf-8 -*- 2 import scrapy 3 from ..items import ChinaItem 4 5 6 class ChinaCompanySpider(scrapy.Spider): 7 name = 'china_company' 8 allowed_domains = ['taoci163.com'] # !!!!!!!!!此处域名要写对,不小心掉坑里了!!!!!!!!! 9 start_urls = ['http://gd.taoci163.com/qiye/a440600p1/FoShanShi.html'] 10 11 def parse(self, response): 12 detail_urls = response.xpath('//div[@class="mainLeft"]//li//span/a[1]/@href').getall() 13 for detail_url in detail_urls: 14 yield scrapy.Request(detail_url,callback = self.parse_detail) 15 next_url = response.xpath('//div[@class="page"]/a[last()]/@href').get() 16 if next_url: 17 yield scrapy.Request(response.urljoin(next_url),callback = self.parse) 18 19 def parse_detail(self,response): 20 company_name = response.xpath('//div[@class="conA contact"]/ul/li[1]/span/text()').get() 21 # 获取公司联系人,添加到列表中 22 contacts_name = response.xpath('//div[@class="conA contact"]/ul/li[2]/span/text()').get() 23 # 获取公司地址,添加到列表中 24 company_addr = response.xpath('//div[@class="conA contact"]/ul/li[3]/span/text()').get() 25 # 获取公司电话,添加到列表中 26 company_phone = response.xpath('//div[@class="conA contact"]/ul/li[5]/span/text()').get() 27 # 获取手机号,添加到列表中 28 mobile_phone = response.xpath('//div[@class="conA contact"]/ul/li[6]/span/text()').get() 29 # 获取公司传真,添加到列表中 30 company_fax = response.xpath('//div[@class="conA contact"]/ul/li[7]/span/text()').get() 31 # 测试 32 item = ChinaItem(company_name = company_name,contacts_name = contacts_name, 33 company_addr = company_addr,company_phone = company_phone, 34 mobile_phone = mobile_phone,company_fax = company_fax) 35 yield item 36
scrapy中的爬虫模块
1 # -*- coding: utf-8 -*- 2 3 # Define your item pipelines here 4 # 5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting 6 # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html 7 8 import csv 9 10 11 class ChinaPipeline(object): 12 def __init__(self): 13 self.fp = open('H:/陶瓷公司数据/佛山陶瓷公司(scrapy).csv','a+',encoding = 'utf-8-sig') 14 self.writer = csv.writer(self.fp) 15 headers = ['公司名称','联系人','公司地址','电话','手机','公司传真'] 16 self.writer.writerow(headers) 17 18 def process_item(self, item, spider): 19 company_name = item['company_name'] 20 contacts_name = item['contacts_name'] 21 company_addr = item['company_addr'] 22 company_phone = item['company_phone'] 23 mobile_phone = item['mobile_phone'] 24 company_fax = item['company_fax'] 25 26 self.writer.writerow((company_name,contacts_name,company_addr,company_phone,mobile_phone,company_fax)) 27 return item 28 29 def close_spider(self,spider): 30 self.fp.close()
scrapy中的pipelines模块
转载于:https://www.cnblogs.com/KisInfinite/p/10952831.html
python爬虫案例-陶瓷公司数据爬取相关推荐
- 利用python爬虫(案例6+part14)--如何爬取科研数据
学习笔记 文章目录 Ajax动态加载网站数据抓取 动态加载的类型 那么该如何抓取数据? 如何得到JSON文件的地址? 观察JSON文件URL地址的查询参数 JSON格式数据转换成python字典 如何 ...
- python爬虫实例——某二手车数据爬取
某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...
- Python爬虫|高德地图地铁数据爬取与制图
目录 一.高德地图数据爬取 1.爬取思路 2.python核心代码 二.Arcmap制图 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下, ...
- Python爬虫 —— 以北京天气数据爬取为例
本文以北京天气为例讲解数据爬取的整个流程,不涉及网络爬虫的原理,直接讲爬取代码怎么写! 1.首先找到你要爬取的网站url:'http://www.tianqihoubao.com/lishi/beij ...
- Python爬虫应用实战-网站数据爬取及数据分析
实战一:中国大学排名 前言 由于上一篇文章中教会了大家如何存储数据,但是由于篇幅过大,就没有加入实战篇.想必大家也等着急了吧,所以今天就为大家带来两篇实战内容,希望可以帮助到各位更好的认识到爬虫与My ...
- 5分钟python爬虫案例,手把手教爬取国内外最新疫情历史数据
俗话说的好,"授之以鱼不如授之以渔",所以小编今天就把爬疫情历史数据的方法分享给你们. 基本思路:分析腾讯新闻"抗肺炎"版块,采用"倒推法" ...
- Python爬虫之淘宝数据爬取(商品名称,价格,图片,销量)
代码详细注释,仅供交流与参考,不作商业用途 代码参考北京理工大学嵩天老师 import requests #导入第三方库 import re import osdef getHTMLText(url) ...
- 【Python爬虫案例学习21】爬取某站上海租房图片
####前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. ####基本环境配置 pytho ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
最新文章
- html邮件链接和锚点链接
- css的checkbox样式变化
- 二叉排序树(搜索树BST)-详解结点的删除
- [Beego] 内置的模板函数(不同格式的字符串和html的互转)
- 实现机器学习的循序渐进指南VII——Blending Stacking
- 「BZOJ2190」[SDOI2008] 仪仗队 - 欧拉函数
- 盼望的意思是什么,怎么用盼望造句?
- 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) Python 版
- ORACLE 字符串操作
- 数据科学之——大数据体系
- 五子棋java源代码博客园_来来来,五子棋源代码
- OSPF基础知识及配置命令
- matlab线性代数对角化,工程线性代数(MATLAB版) (2007年7月)
- 网站盈利模式分类详解
- WebRTC实现简单音视频通话功能
- win11提示找不到gpedit.msc命令
- python之面向对象反射和双下方法
- 简单有效解决onenote无法设置或修改默认的英文字体“Calibri”(简单实用)
- USTCOJ 1382 毛毛虫
- STM32:RTC实时时钟原理
热门文章
- 发送语音+讯飞翻译 项目案例
- 八、数据库服务连接存储(MPIO) 中
- cakephp对数据库的增删改查
- Catalyst 2950/2955交换机的RSPAN配置
- 把企业分“三只鸟”的发展好比“三个策略”
- mysql修改字符集utf8为utf8mb4
- 中外教育专家“支招”中国学生如何接轨国际教育
- ActiveMQ简单使用介绍
- [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】
- volcanol_linux_shell_汇总贴