2022.3.21更新:本博客当时写的时候链家网页中一些属性或需要的信息名称都与参考博客不同,网站中的结构等会经常变化,因此如果直接使用本博客代码可能会导致采集不到需要信息,csv文件为空的情况,希望各位看懂本博客后再去网站根据各自需要和网站此时的设置等修改代码,爬取信息。
一、准备
使用的包有:urllib.request、bs4、pandas、numpy、re、time
urllib.request:用来打开和浏览url中内容
bs4:爬取网页
pandas:生成数据表,并保存为csv文件
numpy:循环的时候用了一下,个人感觉好像可以不用,但是没试过
re:使用正则表达式提取需要的内容
time:为了防止访问网站过于频繁报错,使用time.sleep()暂停一段时间
首先引入包
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import re
import time
二、抓取数据
本博客抓取的信息有:
Direction(房屋朝向)、District(所在商业区)、Floor(楼层)、Garden(房屋所在小区)、Layout(户型)、Price(总价)、Renocation(房屋装修)、Size(面积)、Year(年份)、Id(房屋编号)
ps:本程序抓取的数据,Id由于是科学计数法在csv文件中显示,因此不可以使用(只有Id有问题),需要的朋友可以修改代码解决这个问题,结果会在最后贴出
房屋编号并不在页面中显示,而是在代码里
1、了解一下目标网站的URL结构,例如 北京东城第2页二手房房源_北京东城第2页二手房出售|买卖|交易信息(北京链家)
- bj表示城市,北京
- ershoufang是频道名称,二手房
- dongcheng是城区名称,东城区
- pg2是页面码,第二页
我们要抓取北京的二手房信息,所以前半部分(http://bj.lianjia.com/ershoufang/)是不会变的,而需要遍历城区和页数。使用两层循环,外层遍历城区,内层遍历页数。
chengqu = {'dongcheng': '东城区', 'xicheng': '西城区', 'chaoyang': '朝阳区', 'haidian': '海淀区', 'fengtai': '丰台区',
'shijingshan': '石景山区','tongzhou': '通州区', 'changping': '昌平区', 'daxing': '大兴区', 'sh