Python实战作业:第二周第一节课在 MongoDB 中筛选房源

上周学习的时候,因为不知道怎么提交作业,所以一周的作业都没有提交。所以还是先总结一下上周的学习情况吧。
通过上周的学习,一是初步的了解了网页构成,学会了如何去查看网页的源代码。二是学会了一些基本的从网站上批量获取想要的信息的方法。通过分析网址,构建函数,能够从列表网页中获得想要的信息的网页的网址,也学习到了一些处理异步加载的方法。三是了解了一些遇到javascript时,获得我们想要的信息的方法。但是也遇到了一个网站返回的href值是javascript,分析javascript的代码后,仍然没办法获得真实网址的问题,希望通过后面的学习,能够解决这个问题。四是学会了更好的定位网页中元素的方法,在定位的过程中,通过在浏览器上搜索,来分析定位情况是否符合要求,避免了直接复制selector到IDE中出现的定位不相符的情况。五是在练习爬取摄影网站的下载其中的图片时,学会了如何使用urllib的库进行下载,学会了在下载的同时使用os库创建与下载图片网页title名称相同的文件夹来分开保存图片。
下面这张图是上周学习的成果。

Python实战作业:第二周第一节课在 MongoDB 中筛选房源_第1张图片
摄影.png

当然也遇到了一些问题,比如在爬取摄影网站时,虽然使用了time库限制了请求的时间,但是在爬取了130几个文件夹的图片后,还是出现了服务器禁止访问而中断进程的情况,可能是网站的反爬虫造成的。希望以后的学习能够解决这个问题。


本周开始第二周课程的学习。今天学习了如何在MongoDB筛选房源。
最终的成果是这样的。

Python实战作业:第二周第一节课在 MongoDB 中筛选房源_第2张图片
数据库.png
Python实战作业:第二周第一节课在 MongoDB 中筛选房源_第3张图片
筛选价格大于500的房源.png

我的代码:

from  bs4 import BeautifulSoup
import pymongo,requests,time

client = pymongo.MongoClient('localhost',27017)
detail = client['detail']
sheet_lines = detail['sheet_lines']
# sheet_lines.remove({})
# detailurls=[]
# def get_page_url(page):
#     for urls in range(1,page):
#         url='http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(urls)
#         page_data = requests.get(url)
#         # time.sleep(2)
#         page_soup = BeautifulSoup(page_data.text,'lxml')
#         for page_urls in page_soup.select('li a.resule_img_a'):
#             page_url = page_urls.get('href')
#             detailurls.append(page_url)
# get_page_url(5)
#
# for detailurl in detailurls:
#     detail_wb_data = requests.get(detailurl)
#     # time.sleep(2)
#     detail_soup = BeautifulSoup(detail_wb_data.text,'lxml')
#     title   = detail_soup.select('h4 em')[0].text
#     address = detail_soup.select('span.pr5')[0].text
#     price   = detail_soup.select('div.day_l span')[0].text
#     host_name =detail_soup.select('a.lorder_name')[0].text
#     detail_data = {
#         'title'     : title,
#         'address'   : address,
#         'price'     : price,
#         'host_name' : host_name,
#         'detailurl' : detailurl
#     }
#     print(title)
#     sheet_lines.insert_one(detail_data)
#     print('Done!!!')
# for item in sheet_lines.find({'price':{'$gt':500}}):
#     print(item)

for item in sheet_lines.find():
    if int(item['price'])>=int(500):
      print(item)

总结:
1、上周学习爬取信息的方法还算扎实,所以在爬取房源的时候,没遇到太多的问题。至于代码写得好不好就不知道了。这个还请老师点评。
2、在最后获取价格大于500的房源信息的时候,本想使用试用视频中的方法

for item in sheet_lines.find({'price':{'$gt':500}}):
     print(item)

但是得不到想要的数据。

没得到想要的值.png

后来看了老师给的参考答案,在没有使用int()的时候,依然得不到想要的东西,分析错误的红色提示,才加上int(),最终终于得到了想要的结果。
3、在调试代码的时候,储存了许多不要的信息到数据库中,在正式运行前需要清楚掉之前储存进去的信息,最后搜索知道了remove()这个方法。学习的过程中要善于使用搜索网站来解决一些小问题。
4、最后还是要感谢各位老师的课程,让我这个毫无计算机专业背景的人在短时间内学会了基本的爬虫知识,虽然现在还不知道学这个在今后的工作中能起多大的作用,但是毕竟是学会了一项不错的技能。

你可能感兴趣的:(Python实战作业:第二周第一节课在 MongoDB 中筛选房源)