资讯专栏INFORMATION COLUMN

爱卡_xcar_汽车详解抓取

archieyang / 1564人阅读

摘要:爬虫练手,主要运用,由于要对内部进行分析,所以就直接用了正则匹配,平时也可以用用,应该更加方便思路读取首页,就是如为了全部抓取,我们这里都是结尾找到页面里面的标签里面的,这个这个地址就是页面自动播放的下个页面同时读出即图片地址,然后保存我这

爬虫练手,主要运用requests,由于要对script内部进行分析,所以就直接用了 re 正则匹配,平时也可以用用Beautifulsoup, 应该更加方便

思路:
  

读取首页,就是如 http://newcar.xcar.com.cn/2674/2015/detail/1.htm;为了全部抓取,我们这里都是 1.htm 结尾

  

找到页面里面的 script 标签里面的 " var nextUrl " ,这个这个地址就是页面自动播放的下个页面;同时读出 img src 即 图片地址,然后保存(我这里是把 说明 等内容全部放进 目标文件的名称中了,其实大家只要图片的话完全不需要)

  

递归抓取 全部页面

这里另外做的一点实际 弄了个xcar_lst 记录所有页面、图片等信息,只是留作记录,暂时没用

上代码:
python
# coding:utf-8 __author__ = "BONFY CHEN" import requests import re PROXIES = None HEADERS = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" , "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" , "Accept-Encoding": "gzip,deflate,sdch" , "Accept-Language": "zh-CN,zh;q=0.8" } BASE_FOLDER = "D:/xxx_folder/" class xcarDown(object): _base_folder = None _proxies = None _headers = None _website = "http://newcar.xcar.com.cn" _xcar_lst = [] def set_base_folder(self, base_folder): self._base_folder = base_folder def set_headers(self, headers): self._headers = headers def set_proxies(self, proxies): self._proxies = proxies def __init__(self, base_folder=BASE_FOLDER, proxies=PROXIES, headers=HEADERS): self.set_base_folder(base_folder) self.set_headers(headers) self.set_proxies(proxies) def download_image_from_url(self, url, name=None): """ download_image_from_url :param url: the resource image url :param name: he destination file name :return: """ local_filename = name + "_" + url.split("/")[-1] r = requests.get(url, proxies=self._proxies, headers=self._headers, stream=True) with open(self._base_folder + local_filename, "wb") as f: for chunk in r.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() f.close() return local_filename def download_xcar(self, url): """ :param url: the source url in xcar.com.cn http://newcar.xcar.com.cn/2674/2015/detail/1.htm :return: """ r = requests.get(url, proxies=self._proxies, headers=self._headers) # print r.encoding r.encoding = "gbk" m1 = re.search(r"var nextUrl = "(?P.*.htm)"", r.text) next_url = m1.groupdict()["n_url"] if m1 else None m2 = re.search(r"
(?P.*)</div>", r.text) title = m3.groupdict()["title"] if m3 else "" m4 = re.search(r"<div class="zs_c">(?P<cont>.*)</div>", r.text) cont = m4.groupdict()["cont"] if m4 else "" m5 = re.search(r"<title>(?P<model>.*)", r.text) model = m5.groupdict()["model"] if m5 else "" if pic_url: try: self.download_image_from_url(pic_url, name="_".join([model, title, cont])) print "download complete: pic from {} ".format(pic_url) except IOError: print "file name IOERROR" self.download_image_from_url(pic_url, name=model) print "download complete: pic from {} ".format(pic_url) except Exception as e: print e dct = dict(pic_url=pic_url, next_url=next_url, title=title, cont=cont, model=model) self._xcar_lst.append(dct) if next_url[-4:] == ".htm": self.download_xcar(self._website + next_url) if __name__ == "__main__": print("Welcome to the Pic Download for xcar.com") print("Downloaded files in the folder: " + BASE_FOLDER ) print("---------------------------------------") id_modell = int(input("Please enter the modell id(eg.2674): ")) year = int(input("Please enter the year (eg.2015): ")) url = "http://newcar.xcar.com.cn/{}/{}/detail/1.htm".format(id_modell, year) xcar = xcarDown() xcar.download_xcar(url)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37570.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • php面向对象详解

    摘要:前言自从进入版本以来,开始全面地支持面向对象编程。好了,进入正题,面向对象的三大特性分别是封装性,继承性以及多态性,使用面向对象开发,让我们的程序可维护以及扩展性大大提高。 showImg(https://segmentfault.com/img/remote/1460000012257579?w=1920&h=1080); 前言 自从php进入5.0版本以来,PHP开始全面地支持面向...

    xingpingz 评论0 收藏0
  • scrapy汽车之家车型的简单爬取

    摘要:汽车之家车型的简单爬取名字自定义配置重新定义起始爬取点所有首字母按照首字母,组合对应的页面,压入根据,抓取页面定义默认的抓取函数品牌编号品牌名品牌品牌小类别品牌小类别对应的页面品牌小类别的编号品牌小类别名品牌小类别对应的页面的 汽车之家车型的简单爬取spider # -*- coding: utf-8 -*- import scrapy from scrapy import Reque...

    zhangfaliang 评论0 收藏0
  • 函数式编程之柯里化和组合详解

    摘要:提到函数式编程,就不得不提柯里化和组合。说实话,在之前的项目开发中,对柯里化和组合的运用不是太多,因为不太清楚应该在哪些情况下应该使用它们。所以在这篇文章中,我们将详细的介绍柯里化和组合的用法以及使用场景。 提到函数式编程,就不得不提柯里化和组合。说实话,在之前的项目开发中,对柯里化和组合的运用不是太多,因为不太清楚应该在哪些情况下应该使用它们。所以在这篇文章中,我们将详细的介绍柯里化...

    Jonathan Shieber 评论0 收藏0
  • 2016年,我对爬虫的总结

    摘要:都说年末了,该给自己写写总结了。我现在做一些简单的爬虫都会用它。并且对数据的实时性要求较高,或者爬数据的时候封的太厉害了。对于这一类的爬虫。消息队列用于分发消息给某个爬虫节点。爬虫节点完成具体的爬虫,格式化爬虫数据。最后,感谢我的,谢谢 都说年末了,该给自己写写总结了。今天我想谈一谈的是我在公司这一年多里的负责的部分工作---爬虫。做了这么久的爬虫,是该写点什么,留下点什么。在我所负责...

    netmou 评论0 收藏0

发表评论

0条评论

archieyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<