xpath爬取链家二手房
发布时间
阅读量:
阅读量
import requests
from lxml import etree
from fake_useragent import UserAgent
import random
import time
class LianjiaSpider(object):
def __init__(self):
self.url='https://nc.lianjia.com/ershoufang/pg{}/'
#功能函数:随机获取User-Agent
def get_headers(self):
ua=UserAgent()#创建UserAgent对象
headers={ "User-Agent": ua.random}#随机获取请求头
return headers
#获取页面
def get_html(self,url):
#设置超时时间为5秒,尝试次数为3次
for i in range(3):
try:
res = requests.get(url=url, headers=self.get_headers(),timeout=5)
res.encoding = "utf-8"
html = res.text
return html
except Exception as e:
print("Failed ,Retry:",i)
continue
#解析页面
def parse_html(self,url):
html=self.get_html(url)
#html返回值有两种:1:html 2:None
if html:
parse_obj = etree.HTML(html) # 解析对象
# 基准xpath,li节点列表
li_list = parse_obj.xpath('//ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]')
# for循环遍历每个li节点,获取一个房源的所有数据
item = {}
for li in li_list:
# 名称
item["name"] = li.xpath('.//a[@data-el="region"]/text()')[0].strip()
# 户型+面积+方位+精装+楼层+楼型
# info_list:['3室2厅','110平米','南 北','毛坯','中楼层(共19层)','板楼']
info_list = li.xpath('.//div[@class="houseInfo"]/text()')[0].split('|')
item["model"] = info_list[0].strip()
item["area"] = info_list[1].strip()[:-2]
item["direction"] = info_list[2].strip()
item["perfect"] = info_list[3].strip()
item["floor"] = info_list[4].strip()
# 地区+总价+单价
item["address"] = li.xpath('.//div[@class="positionInfo"]/a/text()')[1].strip()
item["totall"] = li.xpath('.//div[@class="totalPrice"]/span/text()')[0].strip()
item["unit"] = li.xpath('.//div[@class="unitPrice"]/span/text()')[0].strip()[2:-4]
print(item)
#入口函数
def run(self):
for page in range(1,3):
url=self.url.format(page)
self.parse_html(url)
time.sleep(random.uniform(1,3))#产生随机浮点数休眠
if __name__ == '__main__':
spider=LianjiaSpider()
spider.run()
全部评论 (0)
还没有任何评论哟~
