Python-新手爬取安居客新房房源
新手,整个程序还有很多瑕疵。
1.房源访问的网址为城市的拼音+后面统一的地址。需要用到xpinyin库
2.用了2种解析网页数据的库bs4和xpath(先学习的bs4,学了xpath后部分代码改成xpath)
遇到的问题:
1.在解析页面时,鼠标点击过位置的div的class属性值有变化,没有注意,导致浪费很长时间。下图,点击后的div的class属性值的空格没有了。

2.基础学习还要加强,字符串和列表基本命令和转换使用不熟练。
3.没有真正理解 new_list = [i for i in list if i != ''] #删除列表里的空值 这条语句的意思,只是照搬过来用。
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
from xpinyin import Pinyin
import time
from lxml import etree
import json class anjuk_spider(object):
url = '.fang.anjuke.com/loupan/all/'
def __init__(self,city):
self.city = city
#建一个空列表,存放所有的房源信息
self.items = [] #把输入的城市转换成拼音
def citypinyin(self,city):
p = Pinyin()
return p.get_pinyin(self.city,'')
#构建请求体
def handle_request(self,city_url,page_num):
city_url = city_url + 'p' + str(page_num + 1) + '/'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
request = urllib.request.Request(city_url, headers=headers)
return request #解析价格
def price(self,item):
temp = item.xpath('.//a[@class="favor-pos"]/p[1]/text()')[0]
if temp == '售价待定':
temp = temp + " 周边均价:" + item.xpath('.//a[@class="favor-pos"]/p/span/text()')[0] + "元/㎡"
else:
temp = temp + item.xpath('.//a[@class="favor-pos"]/p/span/text()')[0] + "元/㎡"
return temp #解析户型
def huxing(self,item):
temp = item.xpath('.//a[@class="huxing"]//text()')
# 第1步,先建立个空列表。整理爬下来的列表,去掉空格,换行等
list = []
for item in temp:
item = item.replace("\n", "").replace("\t", "").replace("\xa0", "").replace("/", "").replace(" ", "")
list.append(item)
# 删除列表里的空值
new_list = [i for i in list if i != '']
# 把整理好的列表转换成新字符串
item_huxing = "/".join(new_list)
return item_huxing
#解析位置
def address(self,item):
temp = item.xpath('.//a[@class="address"]//span[@class="list-map"]/text()')[0]
end_item_address = temp.find("]")
item_address = temp[end_item_address + 2:]
return item_address #解析数据
def parse_content(self,content):
#利用xpath提取数据
tree = etree.HTML(content)
div_list = tree.xpath('//div[@class="key-list imglazyload"]//div[@class="item-mod "]')
for item in div_list:
try:
#小区名称
item_name = item.xpath('.//h3//span[@class="items-name"]/text()')[0]
#小区位置
item_address = self.address(item)
#小区户型
item_huxing = self.huxing(item)
# 小区价格
item_Price = self.price(item)
#把数据存放到字典中
dict = {
"小区名称":item_name,
"小区位置":item_address,
"户型面积":item_huxing,
"价格":item_Price,
}
#每条字典更新到列表中
self.items.append(dict)
print("小区名称:%s | 位置:%s" %(item_name,item_address))
print("%s|价格:%s" %(item_huxing,item_Price))
print("******************************************************************************")
time.sleep(1)
# print("小区名称:%s | 小区位置:%s |价格:%s" % (item_name,item_address,item_Price))
except:
print("读取出现问题!") def run(self):
# 先要取得请求网址,请求网址的组合为城市拼音+上后面的网址
citypinyin = self.citypinyin(self.city)
#输入的城市请求网址
city_url = 'https://' + citypinyin + self.url
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
#请求体
city_request = urllib.request.Request(city_url,headers = headers)
# 发送请求
content = urllib.request.urlopen(city_request).read().decode()
#处理响应数据,提取当前房源数量,判断应读取几页数据
#创建bs4对象
soup = BeautifulSoup(content,'lxml')
temp_page = int(soup.select('.list-results > .key-sort > .sort-condi > span > em')[0].text)
#用取得的房源数量,计算需要读取多少页数据
#每页有60条数据,如果能整除,那就有总数/60页,如果不能整除,那么就总数/60取整+1页。
if temp_page <= 60:
page = 1
if (temp_page % 60) == 0:
page = temp_page / 60
else:
page = (temp_page // 60) + 1 #发送请求
for page_num in range(page):
#输入网址,页数,反回请求数据
request = self.handle_request(city_url,page_num)
content = urllib.request.urlopen(request).read().decode()
#解析数据
self.parse_content(content)
time.sleep(2)
#转成json格式
string = json.dumps(self.items,ensure_ascii=False)
#将数据写入文本中
with open('安居客房价.txt','w',encoding='utf-8') as f:
f.write(string)
print("存入文本!") def main():
city = input("请输入城市名字:")
#创建对象,开始爬取数据
spider = anjuk_spider(city)
spider.run() if __name__ == '__main__':
main()
Python-新手爬取安居客新房房源的更多相关文章
- python爬虫爬取安居客并进行简单数据分析
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 爬取过程一.指定爬取数据二.设置请求头防止反爬三.分析页面并且与网页源码进行比对四.分析页面整理数据 ...
- Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据
目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...
- python爬取安居客二手房网站数据(转)
之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...
- PyCharm+Scrapy爬取安居客楼盘信息
一.说明 1.1 开发环境说明 开发环境--PyCharm 爬虫框架--Scrapy 开发语言--Python 3.6 安装第三方库--Scrapy.pymysql.matplotlib 数据库--M ...
- 【scrapy实践】_爬取安居客_广州_新楼盘数据
需求:爬取[安居客—广州—新楼盘]的数据,具体到每个楼盘的详情页的若干字段. 难点:楼盘类型各式各样:住宅 别墅 商住 商铺 写字楼,不同楼盘字段的名称不一样.然后同一种类型,比如住宅,又分为不同的情 ...
- python3 [爬虫实战] selenium 爬取安居客
我们爬取的网站:https://www.anjuke.com/sy-city.html 获取的内容:包括地区名,地区链接: 安居客详情 一开始直接用requests库进行网站的爬取,会访问不到数据的, ...
- python3 爬虫之爬取安居客二手房资讯(第一版)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- python大规模爬取京东
python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...
随机推荐
- ASP.NET的底层体系1
文章引导 1.ASP.NET的底层体系1 2.ASP.NET的底层体系2 引言: 学习ASP.NET,要想做的更好,不了解ASP.NET是不行的.一个有理想的程序员都会像挤压海绵一样,努力的去学习和获 ...
- [kuangbin带你飞]专题一 简单搜索 - C - Catch That Cow
#include<iostream> #include<cstdio> #include<string> #include<vector> #inclu ...
- 【笔记篇】C#笔记3
笔记目录:http://blog.csdn.net/enzymii/article/details/77169928 C#的接口有点意思,我们说过可以用来多重继承.. using System; na ...
- python全栈开发:字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 %[(name ...
- Aria2 使用
没错,又是受够了迅雷.旋风的各种奇葩减速(哥哥我还买了了VIP!),IDM 对协议支持又太少还有事没事提示你不是正版三天两头闹着要更新.于是我想起来之前看到过的 Aria2,虽然之前也只是略有耳闻,但 ...
- Django流程
开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图: 假设你已经在浏览器输入了 http://127.0.0.1:8000/polls/,接下来浏览器会把请 ...
- odoo js
1.相关库/框架 主要:jQuery(使用1.8.3,如果使用新版本,其他jQuery插件也要升级或修改).Underscore.QWeb 其他:都在addons\web\static\lib路径下. ...
- 阿里云MaxCompute 2019-8月刊
您好,MaxCompute 2019.8月刊为您带来8月产品.技术最新动态,欢迎阅读. 导读 [重要发布]8月产品重要发布 [文档更新]8月重要文档更新推荐 [干货精选]8月精选技术文章推荐 [精彩活 ...
- 「题解」:[POJ2942]Knights of the Round Table
问题 E: Knights of the Round Table 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 作为一名骑士是一个非常有吸引力的职业:寻找圣杯,拯救遇难的少女,与 ...
- iOS7新特性-完美解决iOS7关于自定义导航条UIBarButtonItem偏移的问题
前言: 本文由DevDiv社区@Vincent 原创,转载请注明出处! http://www.devdiv.com/iOS_iPhone-ios_ios_uibarbuttonitem_-thread ...