爬取内容
爬取源网站
北京二手房 https://bj.lianjia.com/chengjiao/
爬取内容


爬取思路
- 通过不同的条件组合,来尽量获取多的数据(因为有100页的限制)

- 获取当前页的房屋url

- 翻页保存每一页的房屋url,并把url写到本地
- 读取房屋url,爬取每个房屋的具体信息
爬取的数据

代码
获取房屋url
import urllib.request
import ssl
from lxml import etree
import re
import threading
# 全局取消证书验证
ssl._create_default_https_context = ssl._create_unverified_context
# 获取页面
def get_page(url):
page = urllib.request.urlopen(url)
html = page.read().decode('utf-8')
return html
# 获取当前的总页数
def get_page_num(url):
try:
html = get_page(url)
pagenum = re.findall(r'"totalPage":(.+?),"curPage"', html)[0]
except:
pagenum = 0
pagenum = int(pagenum)
return pagenum
# 获取当前页所有房子的url
def get_house_url_current_page(url):
flag = ''
list_house_url_current_page = []
try:
html = get_page(url)
selector = etree.HTML(html)
# 获取成交时间
deal_date = selector.xpath('/html/body/div[5]/div[1]/ul/li[last()]/div/div[2]/div[2]/text()')[0]
# print(deal_date)
# 获取年份
deal_year = deal_date[:4]
if deal_year == '近30天':
pass
elif deal_year == '2018':
house_url_list_li = selector.xpath('/html/body/div[5]/div[1]/ul/li')
for li in house_url_list_li:
house_url = li.xpath('div/div[1]/a/@href')[0]
# print(house_url)
list_house_url_current_page.append(house_url)
else:
flag = 'yearError'
except:
pass
# print(list_house_url_current_page)
return list_house_url_current_page, flag
# 获取某个区所有的房屋url
def get_house_url_current_district(district_url_list):
list_house_url = []
for district_url in district_url_list:
# print(district_url)
pagenum = get_page_num(district_url)
if pagenum == 0:
print('-------')
pagenum = get_page_num(district_url)
print(pagenum)
print(district_url)
print('+++')
for i in range(1, pagenum+1):
url = district_url + 'pg' + str(i)
print(url)
list_house_url_current_page, flag = get_house_url_current_page(url)
if flag == 'yearError':
break
list_house_url.append(list_house_url_current_page)
# print(list_house_url)
# 把所有的url拼接成字符串,便于写入本地
str_url = ''
for row in list_house_url:
for url in row:
str_url += url + '\n'
return str_url
# 把url写到本地
def write_house_url(write_str, district):
path_file = "./data_url/house/" + district + ".txt"
with open(path_file, 'w') as file:
file.write(write_str)</

本文介绍了一个针对链家网北京二手房数据的爬虫项目,详细讲解了爬虫的设计思路、实现方法及数据抓取过程。通过组合不同搜索条件,爬虫能够抓取大量房源信息,包括房屋URL、具体详情等。文章还提供了完整的Python代码示例,涵盖了从获取房屋列表到抓取详细信息的全过程。

1421

被折叠的 条评论
为什么被折叠?



