用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爬虫案例-陶瓷公司数据爬取相关推荐

  1. 利用python爬虫(案例6+part14)--如何爬取科研数据

    学习笔记 文章目录 Ajax动态加载网站数据抓取 动态加载的类型 那么该如何抓取数据? 如何得到JSON文件的地址? 观察JSON文件URL地址的查询参数 JSON格式数据转换成python字典 如何 ...

  2. python爬虫实例——某二手车数据爬取

    某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...

  3. Python爬虫|高德地图地铁数据爬取与制图

    目录 一.高德地图数据爬取 1.爬取思路 2.python核心代码 二.Arcmap制图 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下, ...

  4. Python爬虫 —— 以北京天气数据爬取为例

    本文以北京天气为例讲解数据爬取的整个流程,不涉及网络爬虫的原理,直接讲爬取代码怎么写! 1.首先找到你要爬取的网站url:'http://www.tianqihoubao.com/lishi/beij ...

  5. Python爬虫应用实战-网站数据爬取及数据分析

    实战一:中国大学排名 前言 由于上一篇文章中教会了大家如何存储数据,但是由于篇幅过大,就没有加入实战篇.想必大家也等着急了吧,所以今天就为大家带来两篇实战内容,希望可以帮助到各位更好的认识到爬虫与My ...

  6. 5分钟python爬虫案例,手把手教爬取国内外最新疫情历史数据

    俗话说的好,"授之以鱼不如授之以渔",所以小编今天就把爬疫情历史数据的方法分享给你们. 基本思路:分析腾讯新闻"抗肺炎"版块,采用"倒推法" ...

  7. Python爬虫之淘宝数据爬取(商品名称,价格,图片,销量)

    代码详细注释,仅供交流与参考,不作商业用途 代码参考北京理工大学嵩天老师 import requests #导入第三方库 import re import osdef getHTMLText(url) ...

  8. 【Python爬虫案例学习21】爬取某站上海租房图片

    ####前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. ####基本环境配置 pytho ...

  9. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

最新文章

  1. html邮件链接和锚点链接
  2. css的checkbox样式变化
  3. 二叉排序树(搜索树BST)-详解结点的删除
  4. [Beego] 内置的模板函数(不同格式的字符串和html的互转)
  5. 实现机器学习的循序渐进指南VII——Blending Stacking
  6. 「BZOJ2190」[SDOI2008] 仪仗队 - 欧拉函数
  7. 盼望的意思是什么,怎么用盼望造句?
  8. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) Python 版
  9. ORACLE 字符串操作
  10. 数据科学之——大数据体系
  11. 五子棋java源代码博客园_来来来,五子棋源代码
  12. OSPF基础知识及配置命令
  13. matlab线性代数对角化,工程线性代数(MATLAB版) (2007年7月)
  14. 网站盈利模式分类详解
  15. WebRTC实现简单音视频通话功能
  16. win11提示找不到gpedit.msc命令
  17. python之面向对象反射和双下方法
  18. 简单有效解决onenote无法设置或修改默认的英文字体“Calibri”(简单实用)
  19. USTCOJ 1382 毛毛虫
  20. STM32:RTC实时时钟原理

热门文章

  1. 发送语音+讯飞翻译 项目案例
  2. 八、数据库服务连接存储(MPIO) 中
  3. cakephp对数据库的增删改查
  4. Catalyst 2950/2955交换机的RSPAN配置
  5. 把企业分“三只鸟”的发展好比“三个策略”
  6. mysql修改字符集utf8为utf8mb4
  7. 中外教育专家“支招”中国学生如何接轨国际教育
  8. ActiveMQ简单使用介绍
  9. [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】
  10. volcanol_linux_shell_汇总贴