Python爬虫实战(1)-爬取“房天下”租房信息(超详细)

阅读更多

前言

先看爬到的信息:

 

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第1张图片

上篇文章已经讲了Python安装第三方库,今天主要用到了两个库:RequestsBeautifulSoup。所以我先简单的说一下这两个库的用法,提到的都是此文需要用到的。

 

Requests

requests是一个很实用的Python HTTP客户端库。

下面通过一个例子来了解一下:

网址就用房天下的天津整租租房信息“http://zu.tj.fang.com/house/n31/”

import  requests
#请求头
headers = {
          'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
          }
#Get请求-并传递headers
data=requests.get("http://zu.tj.fang.com/house/n31/",headers=headers)

print(data.text)

如果正常的话打印出来的就是如下,这里只截取一部分:

 

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第2张图片

requests请求也会出现异常,这里我就先不细说了,可以去此网址查下具体用法:

http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

另外上面的代码中的headers是如何来的呢?这里给大家讲一下:

请求头的添加方法:

1.打开你要爬取的网址,在空白处右键-->检查,然后点击Network

 

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第3张图片

 

BeautifulSoup

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

安装Beautiful Soup时注意一个问题, 我的python是3.6版本,安装的是bs4

 

import  requests
import  bs4
#请求头
headers = {
          'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
          }
#Get请求-并传递headers
data=requests.get("http://zu.tj.fang.com/house/n31/",headers=headers)
soup=bs4.BeautifulSoup(data.text,"html.parser")
print(soup.prettify())

输出的是soup文档,结果如下(截取了一部分):

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第4张图片

这里主要讲一下Beautiful Soup中的select()方法, 通过某个属性查找,而属性可以在网页中复制到。

具体的可以直接此网址学:

http://beautifulsoup.readthedocs.io/zh_CN/latest/

复制的步骤:

1.选中你要了解的内容,右键-->检查,比如我对价格进行了“检查”:

 

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第5张图片

2.选择copy selector

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第6张图片

3.复制的放到select方法内,代码如下:

 

headers = {
          'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
          }

data=requests.get("http://zu.tj.fang.com/house/n31/",headers=headers)
soup=bs4.BeautifulSoup(data.text,"html.parser")

concretedata=soup.select("#listBox > div.houseList > dl:nth-of-type(1) > dd > div.moreInfo > p > span")

for houseinformat in  concretedata:
   print(houseinformat.get_text())

输出的肯定是我们选中的价格

注意的是复制的内容里有dl:nth-child(1),直接改成dl:nth-of-type(1)要不会报错的。另外里面的get_text()方法表示直接获取了文字信息,不然会和标签一起显示的。

强调:如果要想获取此列表的所有价格的话,直接观察一下会发现,去掉nth-of-type(1)就可以了,大家应该都明白的。也就是把select方法中的内容改为:

 

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第7张图片

然后运行输出(只截取了一部分):

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第8张图片

实战

根据上面的爬取方式,我们可以把当前网页“房天下天津整租租房信息”中的房屋标题,具体内容与价格爬取下来。

1.爬取标题

爬取标题我们再copy时发现用select方法不是和恰当了,这里应该能看出来吧?看不出来的可以自己去试一试,这里我们查看爬取下来SOUP文档,发现标题是在P标签下的"title"字段

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第9张图片

所以我们可以直接用Beautiful Soup中的find_all()方法

#标题
title=soup.find_all("p","title")

 

2.爬取价格

这就不用多少了,上面讲过

#价格
price=soup.select("#listBox > div.houseList > dl > dd > div.moreInfo > p > span")

 

3.爬取具体内容

 

#具体的内容
concretedata=soup.select("#listBox > div.houseList > dl > dd > div.moreInfo > p > span")

 

整体代码如下:

# -*- coding: gbk -*-
import  requests
import  bs4

def get_lastdata():
   headers = {
       'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
   }

   data = requests.get("http://zu.tj.fang.com/house/n31/", headers=headers)
   #因为打印出来的格式有乱码,所以更改一下编码
   data.encoding="gbk"
   soup = bs4.BeautifulSoup(data.text, "html.parser")
   # 标题
   title = soup.find_all("p""title")
   # 价格
   price = soup.select("#listBox > div.houseList > dl > dd > div.moreInfo > p > span")
   # 具体的内容
   concretedata = soup.select("#listBox > div.houseList > dl > dd > p.font16.mt20.bold")

   for title,price,concretedata in zip(title,price,concretedata):
       last_data={
           "title":title.get_text().strip(),
           "concretedata":concretedata.get_text().strip(),
           "price":price.get_text().strip()
       }

       print(   last_data)

if __name__ == '__main__':
   get_lastdata()

运行结果:

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)_第10张图片

希望对刚入门的朋友有所帮助!

我的微信:lengquele5311

你可能感兴趣的:(python)