wuqi001 发表于 2021-2-22 20:32

二手房信息爬取

本人小白,有什么问题欢迎各位朋友指正:lol

# -*- codeing = utf-8 -*-
# @Time : 2021/2/13 9:29
# @AuThor : wuqi
# @file : 链家二手房信息爬虫.py
# @SOFTWARE :PyCharm

import urllib.request
import urllib.error
import re
from bs4 import BeautifulSoup
import xlwt

findUrl=re.compile(r'<a class="" href="(.+?)" target="_blank"')

savepath = "上海二手房爬虫.xls"
def getUrl():
    baseurl = 'http://sh.lianjia.com/ershoufang/pg'
    url = ''
    urllist = []
    for i in range(1, 5):
      url = baseurl + str(i)
      response = urllib.request.urlopen(baseurl)
      Html = response.read().decode('utf-8')
      url1 = re.findall(findUrl, Html)
      for url in url1:
            urllist.append(url)
    return urllist      #获得所有房子详情页的网页链接,以列表形式
def getData(url,j):
    head = {# 模拟浏览器头部信息,向服务器发送消息
         "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122Safari / 537.36"
      }
   # 用户代{过}{滤}理,表示告诉服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
    req=urllib.request.Request(url,headers=head)
    html = ''
    try:
      response = urllib.request.urlopen(url)
      html = response.read().decode('utf-8')
    except urllib.error.URLError as e:
      if hasattr(e,"code"):
            print(e.code)
      if hasattr(e,"reason"):
            print(e.reason)
    bsobj=BeautifulSoup(html,'html.parser')
    Total_prince=bsobj.findAll(class_='total').get_text()
    sheet.write(j,0,Total_prince)
    unit_price=bsobj.findAll(class_='unitPriceValue').get_text()
    sheet.write(j,1,unit_price)
    community=bsobj.select('.communityName>.info ').get_text()
    sheet.write(j,2,community)
    area=bsobj.select('.areaName>.info').get_text()
    sheet.write(j,3,area)
    Total_type=bsobj.select('li span.label')
    for i in range(len(Total_type)):
      sheet.write(j,4+i,Total_type.next_sibling)


book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('二手房信息爬取', cell_overwrite_ok=True)#创建工作表
col=("总价","元/平米","小区","所在区域")
urllist=getUrl()
print(len(urllist))
for i in range(0,4):
    sheet.write(0,i,col)
url='http://sh.lianjia.com/ershoufang/107103021426.html'
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
bsobj=BeautifulSoup(html,'html.parser')
Total_type=bsobj.select('li span.label')
for i in range(4,15):
    sheet.write(0,i,Total_type.get_text())   #写入列名
for j in range(len(urllist)):
    try:
      url=urllist
      getData(url,j+1)
      print("第"+str(j+1)+"个房源提取成功")
    except:
      print("第"+str(j+1)+"个房源提取失败")
      continue
book.save(savepath)





wuqi001 发表于 2021-2-23 15:18

ladybug2020 发表于 2021-2-23 09:09
url='http://sh.lianjia.com/ershoufang/107103021426.html'这是啥意思?

一个房源的链接,利用这个链接将交易属性的标签写入excel的第一行中

wuqi001 发表于 2021-2-23 15:24

weizong 发表于 2021-2-22 23:44
学了多久

从年前开始看书的,正式打代码是从这几天开始的。我只会一些基础的,框架,多线程什么的还有好多没学呢{:1_924:}

weizong 发表于 2021-2-22 23:44

学了多久

ladybug2020 发表于 2021-2-23 09:09

url='http://sh.lianjia.com/ershoufang/107103021426.html'这是啥意思?

独立电影人 发表于 2021-2-23 14:03

爬取的结果分享一下 :lol

wuqi001 发表于 2021-2-23 15:21

独立电影人 发表于 2021-2-23 14:03
爬取的结果分享一下

运行一遍就有结果了噻{:1_918:}。我只爬了百多个房源

独立电影人 发表于 2021-2-23 16:17

wuqi001 发表于 2021-2-23 15:21
运行一遍就有结果了噻。我只爬了百多个房源

不想分享一下嘛~~

wuqi001 发表于 2021-2-23 20:10

excel分享不上来:rggrg。就打包了一下。

ladybug2020 发表于 2021-2-24 08:48

wuqi001 发表于 2021-2-23 15:18
一个房源的链接,利用这个链接将交易属性的标签写入excel的第一行中

感谢楼主回复。
页: [1] 2
查看完整版本: 二手房信息爬取