最新python爬取自如网房源信息(2),搜狐新媒体运营面试

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

from lxml import etree

def parse_one_page(sourcehtml):

‘’‘解析单页源码’‘’

contentTree = etree.HTML(sourcehtml) #解析源代码

results = contentTree.xpath(‘//ul[@id=“houseList”]/li’) #利用XPath提取相应内容

for result in results[1:]:

title = result.xpath(“./div/h3/a/text()”)[0][5:] if len(result.xpath(“./div/h3/a/text()”)[0]) > 5 else “”

location = result.xpath(“./div/h4/a/text()”)[0].replace(“[”, “”).replace(“]”, ‘’)

area = " “.join(result.xpath(”./div/div/p[1]/span/text()“)).replace(” “, “”, 1) # 使用join方法将列表中的内容以” "字符连接

nearby = result.xpath(“./div/div/p[2]/span/text()”)[0]

yield {

“title”: title,

“location”: location,

“area”: area,

“nearby”: nearby

}

def main():

page = 1

html = get_one_page(page)

print(type(html))

parse_one_page(html)

for item in parse_one_page(html):

print(item)

if name == ‘main’:

main()

time.sleep(1)

获取多个页面

def parse_one_page(sourcehtml):

‘’‘解析单页源码’‘’

contentTree = etree.HTML(sourcehtml) #解析源代码

results = contentTree.xpath(‘//ul[@id=“houseList”]/li’) #利用XPath提取相应内容

for result in results[1:]:

title = result.xpath(“./div/h3/a/text()”)[0][5:] if len(result.xpath(“./div/h3/a/text()”)[0]) > 5 else “”

location = result.xpath(“./div/h4/a/text()”)[0].replace(“[”, “”).replace(“]”, ‘’)

area = " “.join(result.xpath(”./div/div/p[1]/span/text()“)).replace(” “, “”, 1) # 使用join方法将列表中的内容以” "字符连接

#nearby = result.xpath(“./div/div/p[2]/span/text()”)[0].strip()这里需要加判断, 改写为下句

nearby = result.xpath(“./div/div/p[2]/span/text()”)[0].strip() if len(result.xpath(“./div/div/p[2]/span/text()”))>0 else “”

yield {

“title”: title,

“location”: location,

“area”: area,

“nearby”: nearby

}

print(nearby)

#yield {“pages”:pages}

def get_pages():

“”“得到总页数”“”

page = 1

html = get_one_page(page)

contentTree = etree.HTML(html)

pages = int(contentTree.xpath(‘//div[@class=“pages”]/span[2]/text()’)[0].strip(“共页”))

return pages

def main():

pages = get_pages()

print(pages)

for page in range(1,pages+1):

html = get_one_page(page)

for item in parse_one_page(html):

print(item)

if name == ‘main’:

main()

time.sleep(1)

存储到MongoDB中

需确保MongoDB已启动服务, 否则必然会存储失败

def save_to_mongodb(result):

“”“存储到MongoDB中”“”

创建数据库连接对象, 即连接到本地

client = pymongo.MongoClient(host=“localhost”)

指定数据库,这里指定ziroom

db = client.iroomz

指定表的名称, 这里指定roominfo

db_table = db.roominfo

try:

#存储到数据库

if db_table.insert(result):

print(“—存储到数据库成功—”,result)

except Exception:

print(“—存储到数据库失败—”,result)

完整代码


1 # -- coding: utf-8 --

2

3 import requests

4 import time

5 import pymongo

6 from lxml import etree

7 from requests.exceptions import RequestException

8 def get_one_page(page):

9 ‘’‘获取单页源码’‘’

10 try:

11 url = “http://hz.ziroom.com/z/nl/z2.html?p=” + str(page)

12 headers = {

13 ‘Referer’:‘http://hz.ziroom.com/’,

14 ‘Upgrade-Insecure-Requests’:‘1’,

15 ‘User-Agent’:‘Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36’

16 }

17 res = requests.get(url,headers=headers)

18 if res.status_code == 200:

19 return res.text

20 return None

21 except RequestException:

22 return None

23 def parse_one_page(sourcehtml):

24 ‘’‘解析单页源码’‘’

25 contentTree = etree.HTML(sourcehtml) #解析源代码

26 results = contentTree.xpath(‘//ul[@id=“houseList”]/li’) #利用XPath提取相应内容

27 for result in results[1:]:

28 title = result.xpath(“./div/h3/a/text()”)[0][5:] if len(result.xpath(“./div/h3/a/text()”)[0]) > 5 else “”

29 location = result.xpath(“./div/h4/a/text()”)[0].replace(“[”, “”).replace(“]”, ‘’)

30 area = " “.join(result.xpath(”./div/div/p[1]/span/text()“)).replace(” “, “”, 1) # 使用join方法将列表中的内容以” "字符连接

31 #nearby = result.xpath(“./div/div/p[2]/span/text()”)[0].strip()这里需要加判断, 改写为下句

32 nearby = result.xpath(“./div/div/p[2]/span/text()”)[0].strip() if len(result.xpath(“./div/div/p[2]/span/text()”))>0 else “”

33 data = {

34 “title”: title,

35 “location”: location,

36 “area”: area,

37 “nearby”: nearby

38 }

39 save_to_mongodb(data)

40 #yield {“pages”:pages}

41 def get_pages():

42 “”“得到总页数”“”

43 page = 1

44 html = get_one_page(page)

45 contentTree = etree.HTML(html)

46 pages = int(contentTree.xpath(‘//div[@class=“pages”]/span[2]/text()’)[0].strip(“共页”))

47 return pages

48 def save_to_mongodb(result):

49 “”“存储到MongoDB中”“”

50 # 创建数据库连接对象, 即连接到本地

51 client = pymongo.MongoClient(host=“localhost”)

52 # 指定数据库,这里指定ziroom

53 db = client.iroomz

54 # 指定表的名称, 这里指定roominfo

55 db_table = db.roominfo

56 try:

57 #存储到数据库

58 if db_table.insert(result):

59 print(“—存储到数据库成功—”,result)

60 except Exception:

61 print(“—存储到数据库失败—”,result)

62

63 def main():

64 pages = get_pages()

65 print(pages)

66 for page in range(1,pages+1):

67 html = get_one_page(page)

68 parse_one_page(html)

69

70 if name == ‘main’:

71 main()

72 time.sleep(1)

最终结果


在这里插入图片描述

总结


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值