python爬虫——《瓜子网》的广州二手车市场信息
由于多线程爬取数据比单线程的效率要高,尤其对于爬取数据量大的情况,效果更好,所以这次采用多线程进行爬取。具体代码和流程如下:
import math
import re
from concurrent.futures import ThreadPoolExecutor
import requests
import lxml
import lxml.etree
# 获取网页源代码
def getHtml(url, header):
    try:
        response = requests.get(url, headers=header)
        response.raise_for_status()
        return response.content.decode('utf-8')
    except:
        return ''
# 获取翻页url
def getPageUrl(url, response):
    mytree = lxml.etree.HTML(response)
    # 页码
    carNum = mytree.xpath('//*[@id="post"]/p[3]/text()')[0]
    carNum = math.ceil(int(re.findall('(\d+)', carNum)[0]) / 40)
    urlList = url.rsplit('/', maxsplit=1)
    pageUrlList = []
    if carNum != 0:
        for i in range(1, carNum + 1):
            pageUrl = urlList[0] + "/o" + str(i) + "/" + urlList[1]
            pageUrlList.append(pageUrl)
    return pageUrlList
# 获取汽车品牌
def getCarBrand(response):
    mytree = lxml.etree.HTML(response)
    # 汽车品牌url
    carBrandUrl = mytree.xpath('//div[@class="dd-all clearfix js-brand js-option-hid-info"]/ul/li/p/a/@href')
    # 汽车品牌名
    carBrandName = mytree.xpath('//div[@class="dd-all clearfix js-brand js-option-hid-info"]/ul/li/p/a/text()')
    carBrandDict = {}
    for i in range(len(carBrandName)):
        carBrandDict[carBrandName[i]] = "https://www.guazi.com" + carBrandUrl[i]
    return carBrandDict
# 获取汽车信息
def getCarInfo(pageUrl, carBrandName):
    response = getHtml(pageUrl, header)
    mytree = lxml.etree.HTML(response)
    for i in range(40):
        # 汽车名称
        carName = mytree.xpath('//ul[@class="carlist clearfix js-top"]/li/a/h2/text()')[i]
        # 汽车图片
        carPic = mytree.xpath('//ul[@class="carlist clearfix js-top"]/li/a/img/@src')[i]
        carPic = carPic.rsplit("jpg", maxsplit=1)[0] + 'jpg'
        # 汽车出产年份、里程数
        carInfo = mytree.xpath('//ul[@class="carlist clearfix js-top"]/li/a/div[1]/text()')[i]
        # 现价
        carCurrentPrice = mytree.xpath('//ul[@class="carlist clearfix js-top"]/li/a/div[2]/p/text()')[i] + "万"
        # 原价
        carOriginPrice = mytree.xpath('//ul[@class="carlist clearfix js-top"]/li/a/div[2]/em/text()')[i]
        print(carName, carPic, carInfo, carCurrentPrice, carOriginPrice)
        # 写入文件
        path = carBrandName + '.txt'
        with open(path, 'a+') as f:
            f.write(str((carName, carPic, carInfo, carCurrentPrice, carOriginPrice)) + '\n')
if __name__ == '__main__':
    url = 'https://www.guazi.com/gz/buy/'
    header = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
    }
    # 获得初始页源代码
    html = getHtml(url, header)
    # 获取汽车品牌信息字典
    carBrandDict = getCarBrand(html)
    # 多线程(10条的线程池)
    with ThreadPoolExecutor(10) as exT:
        # 程序执行流程
        # 根据汽车品牌进行爬取
        for carBrandName, carBrandUrl in carBrandDict.items():
            # 获取不同品牌页面源代码
            html = getHtml(carBrandUrl, header)
            # 获取当前品牌页面的页码url
            pageUrlList = getPageUrl(carBrandUrl, html)
            # 翻页
            for pageUrl in pageUrlList:
                # 获取汽车信息并写入文件
                exT.submit(getCarInfo, pageUrl, carBrandName)结果如下:
由于《瓜子网》更新过域名,所以之前有评论说网页打不开,现已做了处理,程序能正常爬取数据啦!
以上就是我的分享,如果有什么不足之处请指出,多交流,谢谢!
如果喜欢,请关注我的博客:https://www.cnblogs.com/qiuwuzhidi/
想获取更多数据或定制爬虫的请点击python爬虫专业定制
python爬虫——《瓜子网》的广州二手车市场信息的更多相关文章
- python爬虫实例--网易云音乐排行榜爬虫
		网易云音乐,以前是有个api 链接的json下载的,现在没了, 只有音乐id,title , 只能看播放请求了, 但是播放请求都是加密的值,好坑... 进过各种努力, 终于找到了个大神写的博客,3.6 ... 
- Python 爬虫 当当网图书 scrapy
		目标站点需求分析 获取当当网每个图书名字和评论数 涉及的库 scrapy,mysql 获取解析单页源码 保存到数据库中 结果 
- python爬虫  赶集网
		#coding=utf-8import requestsfrom lxml import etreefrom sqlalchemy import create_enginefrom sqlalchem ... 
- Python爬虫之爬取慕课网课程评分
		BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ... 
- Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理
		作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ... 
- python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
		python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ... 
- python爬虫:爬取慕课网视频
		前段时间安装了一个慕课网app,发现不用注册就可以在线看其中的视频,就有了想爬取其中的视频,用来在电脑上学习.决定花两天时间用学了一段时间的python做一做.(我的新书<Python爬虫开发与 ... 
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
		用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ... 
- Python爬虫教程-15-读取cookie(人人网)和SSL(12306官网)
		Python爬虫教程-15-爬虫读取cookie(人人网)和SSL(12306官网) 上一篇写道关于存储cookie文件,本篇介绍怎样读取cookie文件 cookie的读取 案例v16ssl文件:h ... 
随机推荐
- 数数字(JAVA语言)
			package 第三章习题; /* * 把前n(n<=10000)个整数顺次写在一起: * 89101112... * 数一数0-9各出现多少次 * (输出10个整数,分别是09出现的次 ... 
- 攻防世界 reverse seven
			seven hctf2018 这是一个驱动文件 ida载入,查找字符串 根据字符串来到函数:sub_1400012F0 __int64 __fastcall sub_1400012F0(__int6 ... 
- Java 并发工具类 CountDownLatch、CyclicBarrier、Semaphore、Exchanger
			本文部分摘自<Java 并发编程的艺术> CountDownLatch CountDownLatch 允许一个或多个线程等待其他线程完成操作.假设现有一个需求:我们需要解析一个 Excel ... 
- 【原创】Linux虚拟化KVM-Qemu分析(十一)之virtqueue
			背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ... 
- 以绝对优势立足:从CDN和云存储来聊聊云生态的崛起
			以绝对优势立足:从CDN和云存储来聊聊云生态的崛起 前面几期文章我们介绍了混合云模式,以及面向应用层的云架构解决方案的Spring Cloud.接下来,我们就以蘑菇街的两个具体案例,来分享一下基于混合 ... 
- Python数据分析入门(十六):设置可视化图表的信息
			现在我们添加图后,没有指定x轴代表什么,y轴代表什么,以及这个图的标题是什么.因此以下我们通过一些属性来设置一下. 设置线条样式: 使用plot方法:plot方法就是用来绘制线条的,因此可以在绘制的时 ... 
- isAssignableFrom与instanceof
			isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点: isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角 ... 
- JAVAEE_Servlet_10_HTTP协议
			HTTP协议 * 什么是HTTP 协议? - HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数 ... 
- Python容器相关操作
			(集合与字典除外)的容器相关操作 (1)容器的拼接 >>> 'abc' + 'def' 'abcdef' (2)容器的重复 >>> (1, 2) * 3 (1, 2 ... 
- 到底什么才叫SEO
			昨天去面试,公司的老板,问了我几个SEO的问题.SEO是什么?长尾词与关键词的区别?你用哪些SEO工具? SEO就是为了将关键词做上好的位置展示给用户.难道不是吗? 这些问题,我都答了一下. 然后他问 ... 
