python爬取58同城二手房信息_动手写爬虫(2):爬取58同城二手物品信息
工作这么多年一直想学习一下爬虫技术,各种尝试之后发现学习的最好方式就是直接开干:那就找一个想爬的东西开始爬啊!
从模仿用正则表达式爬取,到现在通过网络课程学习使用BeatifulSoup库来爬取信息,大概花了一个月左右的零散时间,感觉还是有些进步的,得记录一下,现在就分享一下58同城二手物品信息的爬取过程。
1.分析爬取目标页面与目标
以58同城二手物品页面开始,爬取该页面中二手物品详细信息。
详细信息分布在子页面中,故,需要先从主页面获取子页面的链接,再从子页面中获取我们的目标信息。这样把爬取过程分成了两部分:
- 爬主页面获取二手物品子页面的信息;
-爬取子页面(页面示例)获取对应二手物品的标题、价格、成色、区域、发布日期、类别等信息。
对应的,我们查看对应的页面,**确定所需要爬取的元素在对应页面中所处的位置、确定获取方式。
2. 爬取主页面中的二手物品链接
通过chrome检查
复制结果即是对应的链接位置表述:
infolist > table:nth-child(7) > tbody > tr:nth-child(2) > td.t > a
由于网页构成中td标签、t样式下的a标签对应的内容都是子页面链接,故可以用‘td.t > a’作为筛选条件,通过BeautifulSoup中的select方法对其进行筛选。代码见最后部分。(注:代码中对业面中的一些特殊物品类别进行了剔除,包括转转页面、推荐信息部分等)
3. 爬取子页面中物品详细信息
将上一步获取的子页面链接传递给
过程与提取主页面中链接是一样的,不过这次需要提取的元素多了一些,我们按上述过程逐个检查,确定元素对应的筛选表述。
最后通过get_text等方式,将所需信息从爬取的元素中提取出来。
4.完整的python代码
from bs4 import BeautifulSoup
import time
import requests
url_58 = 'http://bj.58.com/pbdn/0/'
def get_url_list(url):
web_data = requests.get(url)
soup = BeautifulSoup(web_data.text,'lxml')
url = soup.select('td.t > a[class="t"]')
url_list = ''
for link in url:
link_i = link.get('href')
if 'zhuanzhuan'in link_i:
pass
else:
if 'jump' in link_i:
pass
else:
url_list = url_list + '\n'+link_i
print('urllist',url_list)
return url_list
def get_info():
url_list = get_url_list(url_58)
for url in url_list.split():
time.sleep(1)
web_data = requests.get(url)
soup = BeautifulSoup(web_data.text,'lxml')
type = soup.select('#header > div.breadCrumb.f12 > span:nth-of-type(3) > a')
title = soup.select('div.col_sub.mainTitle > h1')
date = soup.select('li.time')
price = soup.select('div.person_add_top.no_ident_top > div.per_ad_left > div.col_sub.sumary > ul > li:nth-of-type(1) > div.su_con > span.price.c_f50')
fineness = soup.select('div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span')
area = soup.select('div.col_sub.sumary > ul > li:nth-of-type(3) > div.su_con > span')
#print(type,title,date,price,fineness,area)
for typei,titlei,datei,pricei,finenessi,areai in zip(type,title,date,price,fineness,area):
data = {
'type':typei.get_text(),
'title':titlei.get_text(),
'date':datei.get_text(),
'price':pricei.get_text(),
'fineness':(finenessi.get_text()).strip(),
'area':list(areai.stripped_strings)
}
print(data)
get_info()
5.最终结果样例
{'area': ['通州', '-', '物资学院路'], 'title': 'iPad mini 2 Wi-Fi 16G 白色 港版', 'date': '2016-05-07', 'type': '北京二手平板电脑', 'fineness': '-', 'price': '1200'}
{'area': ['西城', '-', '西单'], 'title': 'iPad2 16G 国行 WiFi 平板电脑', 'date': '2016-05-07', 'type': '北京二手平板电脑', 'fineness': '-', 'price': '900'}
6.总结
其实从网页中提取对应元素并不复杂,麻烦的是反爬、对目标信息进行提取(get_text、stripped_strings等等方法还需要继续研究一下),以及对整个爬取过程的控制:通常我们要获取的信息都不止在一个页面上,这就需要一个好的过程调度,保证爬取效率。
以上仅供学习,请勿用于商业用途。
python爬取58同城二手房信息_动手写爬虫(2):爬取58同城二手物品信息相关推荐
- python爬取网页文字和图片_简单的爬虫:爬取网站内容正文与图片
我们来写个简单的爬虫#### 需要用到的模块 需要用到python的urllib和lxml模块,urllib为python的自带模块,lxml需要自行安装:pip install lxml 简单介绍u ...
- 第一次写爬虫程序爬取豆瓣5W条电影数据
第一次写爬虫程序爬取豆瓣5W条电影数据 最近工作比较不是很忙,想到之前使用httpclient和jsoup爬取过一次豆瓣电影TOP250,但总觉得数据量太小,不过瘾.于是趁着最近不是很忙的机会,重新写 ...
- 毕业设计-二手物品信息分享平台
项目背景 作为一个学生,加了学校大大小小的微信群,有学校的,有系里的,有同一个小区的,还有狼人杀群. 每到学期末就有不少毕业或者要搬家的同学在群里发自己的二手物品信息.小到文具,大到汽车,大家都想让自 ...
- python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息
背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...
- Python编曲实践(五):通过编写爬虫来爬取海量MIDI文件,预备构建数据集(附有百度云下载链接)
前言 由于毕业设计的课题是通过CycleGAN搭建一个音乐风格转换系统,需要大量的音乐文件来训练神经网络,而MIDI文件作为最广泛使用的一种电脑编曲保存媒介,十分容易搜集资源,也有很多成熟的Pytho ...
- python打包加版本信息_使用pyi-set_version为PyInstaller打包出来的程序附加版本信息...
本文将讲述如何使用 pyi-grab_version获取版本信息的模板文件,以及使用 pyi-set_version为打包好的程序附加版本信息. 当然了,在开始前,需要你已经安装好了 PyInstal ...
- 手机写python爬虫_可以写爬虫的那么多,为什么只有python火了?
网络爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模 ...
- 开发记录_自学Python写爬虫程序爬取csdn个人博客信息
每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...
- python从零开始学爬虫_从零开始学爬虫(爬取豆瓣),一看就会
一. 准备工作 语言:python 编辑器:pycharm 需要导的包:bs4.re.urllib.xlwt(可以通过左上角file->settings->project->inte ...
- python爬虫爬取网易云音乐歌曲_如何用爬虫获取网易云音乐歌单中的歌曲?
--------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...
最新文章
- 取出json中的数据php,怎么从Json中取出数据放到一个新组中
- 揭秘三维视觉之结构光原理
- 复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第七大题解答
- 《为iPad而设计:打造畅销App》——想象iPad上的游戏
- Serverless在游戏运营行业进行数据采集分析的最佳实践 链接:
- SDCC 2016数据库峰会(深圳站)学习笔记
- 【Flink】Flink 小知识点 Flink 同时 保存 offset 到backend 和 kafka 内置 topic
- 万人马拉松,人脸识别系统如何又快又准完成校验?
- 【同124】LeetCode 543. Diameter of Binary Tree
- nachos 5.0j(java版)学习笔记一:环境搭建
- 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )
- 项目整合管理——变更控制流程
- 实现一个病毒扫描app——python爬取病毒样本
- NodeJS+七牛云实现图片上传
- word标题级别与编号不关联的处理办法
- Java实现仿win10计算器
- 使用ToUpperInvariant避免使用ToUpper
- 国外大学网上免费课程
- ELK 日志分析平台 —— Logstash
- android探索宇宙app,AR研学星系探索app