下面例子是爬取人人车车辆信息。 多线程/多进程:提高代码的执行效率,放在爬虫中就是提高爬取效率。因为可以使用多个进程同时对多个页面发起请求。from urllib.request import urlopen
from urllib.error import HTTPError
# 进程池:比较方便,使用简单。
from multiprocessing import Poolimport re, sqlite3class RRCSpider(object):"""人人车爬虫类"""def __init__(self):pass# 建立数据库对象和游标对象# self.connect = sqlite3.connect('rrc.db')# self.cursor = self.connect.cursor()def get_list_html(self, page_num):"""获取列表页源代码:param page_num: 列表页的页码:return: 返回网页源代码"""list_url = 'https://www.renrenche.com/zz/ershouche/p{}/'.format(page_num)try:list_html = urlopen(list_url).read().decode()except HTTPError as e:print('列表页异常:url={}, error={}'.format(list_url, e))return None, Noneelse:return list_html, list_urldef parse_list_html(self, list_html, list_url):"""解析列表页数据:param list_html: 列表页网页源代码:return: 返回每一个数据的详情页地址"""# 利用正则表达式提取列表页中所有二手车的详情页的链接。detail_urls = re.findall(re.compile(r'<li class="span6 list-item.*?".*?<a.*?href="(.*?)".*?class="thumbnail"', re.S), list_html)if detail_urls:return detail_urlselse:print('列表页数据为空:url={}'.format(list_url))return Nonedef get_detail_html(self, detail_url):"""获取详情页源代码:param detail_url: 详情页的url:return: 返回详情页网页源代码"""try:detail_html = urlopen(detail_url).read().decode()except HTTPError as e:print('详情页异常:url={}, error={}'.format(detail_url, e))return None, Noneelse:return detail_html, detail_urldef parse_detail_html(self, detail_html, detail_url):"""解析详情页数据:param detail_html: 详情页网页源代码:return: None"""# [('本天', '6.7', '2010')]data = re.findall(re.compile(r'<h1 class="title-name rrc.*?">(.*?)</h1>.*?<p class="price.*?">(.*?)</p>.*?<p class="money.*?首付(.*?)<.*?月供(.*?)</p>.*?<ul class=".*?box-list-primary-detail">.*?<strong class="car-summary rrc.*?">(.*?)</strong>.*?<p class="small-title rrc.*?">(.*?)</p>.*?<strong.*?id="car-licensed">(.*?)</strong>.*?<p>.*?<strong class="car-summary">(.*?)</strong>.*?<p class="transfer-record">.*?<strong.*?>(.*?)</strong>',re.S), detail_html)[0]print(data)def start_spider(self, num):"""爬虫程序启动入口:return:"""print('正在请求第{}页'.format(num))list_html, list_url = self.get_list_html(num)if list_html:detail_urls = self.parse_list_html(list_html, list_url)if detail_urls:for detail_url in detail_urls:url = 'https://www.renrenche.com' + detail_urldetail_html, d_url = self.get_detail_html(url)if detail_html:self.parse_detail_html(detail_html, d_url)if __name__ == '__main__':obj = RRCSpider()# 这是同步for循环# for x in range(1, 2):#     obj.start_spider(x)# 多进程for循环:第一页、第二页...同时开始获取数据# 创建进程池对象,并指定创建进程的数量。pool = Pool(3)pool.map(obj.start_spider, [x for x in range(1, 11)])# 让主进程等待:等待子进程的任务执行完毕以后,再执行主进程的后续代码。# 主进程是控制程序的启动和结束,一旦主进程停止,那么整个程序也就终止了。默认情况下,主进程是不会等待子进程的任务执行完毕的,因为进程间的任务执行是相互独立的,所以,如果主进程在子进程任务没有执行完毕的前提下就关闭了主进程,那么子进程剩余的任务就无法执行了,所以,必须让主进程等待子进程,否则任务无法全部执行完毕。pool.close()pool.join()# obj.cursor.close()# obj.connect.close()

利用进程池多进程爬取人人车信息相关推荐

  1. 【爬虫入门】【正则表达式】【同步】爬取人人车车辆信息1.0

    # 爬取人人车车车辆信息.from urllib.request import urlopen from urllib.error import HTTPErrorimport re, sqlite3 ...

  2. 二手车数据分析-爬取人人车二十余万条线上二手车数据

    我国汽车保有量近年来持续高速增长,二手车交易也正蓬勃发展,涌现出瓜子.优信.人人车,等大量二手车交易网站. 这次就通过在线抓取人人车发布的线上二手车数据,对目前二手车的交易情况进行分析. 使用工具: ...

  3. python爬火车票是不是违法_python利用selenium+requests+beautifulsoup爬取12306火车票信息...

    在高速发展的时代.乘车出远门是必不可少的,有些查询信息是要收费的.这里打造免费获取火车票信息 想要爬取12306火车票信息,访问12306官方网站,输入出发地,目的地  ,时间  之后点击确定,这是我 ...

  4. python网络爬虫--项目实战--scrapy爬取人人车(5)

    一.目标 爬取多页人人车的车辆信息 二.分析 2.1 网站分析 在网页源代码中可以搜索到页面中的数据,所以可以判断该页面为静态加载的 三.完整代码 renrenche.py import scrapy ...

  5. python爬取人人车网站数据

    使用python对人人车网站进行爬取 # 导入库requests.re.xlwt import requests import re import xlwt header={"User-Ag ...

  6. Python网络爬虫--项目实战--scrapy爬取人人车

    一.目标 爬取多页人人车的车辆信息 二.分析 2.1 网站分析 在网页源代码中可以搜索到页面中的数据,所以可以判断该页面为静态加载的 三.完整代码 renrenche.py import scrapy ...

  7. python简单爬取人人车网站在售北京二手车车况信息并存入mysql数据库

    直接上代码 ''' 人人车 北京二手车 1.名称,2.价格,3.详情,4.图片,5.生产日期,6.公里数,7.首付,8.降价信息,9.车牌所在地,10.排放标准 11.过户记录,12.车主评价,13. ...

  8. 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据...

    1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...

  9. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

最新文章

  1. Spark UDF用户自定义函数
  2. wex5教程 宝塔面板+lnmp+wex5项目部署
  3. C++自学笔记_文本查询程序_《C++ Primer》
  4. python爬虫之路自学教程_python 爬虫学习之路
  5. Ubuntu安装Sublime Text并输入中文
  6. windows下共享文件夹在Linux下打开
  7. 在实际项目中使用LiteDB NoSQL数据库
  8. html5 扩展属性,HTML5属性的介绍和扩展.doc
  9. 动态规划——最大子段和(hdu1003,1231)
  10. 微信小程序网络通信(一)
  11. html树图制作,d3.js制作树结构图
  12. flex右对齐_移动WEB开发 — Flex布局
  13. Hadoop核心架构(1)
  14. iOS开发NSDate、NSString、时间戳之间的转化
  15. Kotlin Weekly 中文周报 —— 102
  16. VFP基础教程 2.8 使用命令建立和操作索引文件
  17. 计算机检索的pdf格式,计算机检索基础.pdf
  18. 协同软件解决方案集合
  19. OpenERP 模块动态加载原理及启动代码分析
  20. FAN73893MX 350mA-650mA 高压600V 用于高压、高速驱动 MOSFET和IGBT 三相半桥栅极驱动 IC

热门文章

  1. SpringCloud Gateway 通过redis实现限流
  2. C++学习(一一七)pdb文件
  3. 决策树 (Decision Tree) 原理简述及相关算法(ID3,C4.5)
  4. 苹果手机代理charles(此链接非私人连接)
  5. 大型网站技术架构一览
  6. html5 jquery paint plugin,5+最好的画板,并在画布上手动绘制JavaScript和jQuery插件
  7. 一文读懂JS继承相关知识点
  8. Bittersweet——NOIP2018 游记
  9. 仿微信图片查看器入场退场动画
  10. Android Kotlin Paging3 Flow完整教程