北京汉传佛寺游人评价数据的抓取与分析(1)

之前写好的部分明明已经保存了的,为啥就不见了呢mdzz!

要求:

运用Python语言编写网络爬虫获取游客评论数据,借助自然语言处理(NLP)领域中的研究方法挖掘当今人们对寺庙园林的态度和观点,并寻找有趣的可视化方式呈现结果

想法:

  1. 抓取寺院粗略信息吗,放入list
  2. 经过比较 蚂蜂窝,去哪,携程,大众点评 后发现,蚂蜂窝的数据清洗难度较低
  3. 从抓取的寺院中筛选出汉传佛寺放入list
  4. 蚂蜂窝好像采取了一定的反爬取措施,遂使用selenium+PhantomJS模拟浏览器的行为
  5. 再使用bs4解析上一步抓取到的html文档
  6. 此处考虑使用多进程的进行抓取
  7. 将bs4解析出来的数据放入MongoDB中
#coding=utf-8
from selenium import webdriver
import time

def get_temple_page_source():

    driver = webdriver.PhantomJS()

    url = 'http://www.mafengwo.cn/mdd/map/10065.html'

    driver.get(url)

    time.sleep(1)

    driver.find_element_by_css_selector('a[data-channel="search"]').click()
    time.sleep(1)


    driver.find_element_by_css_selector('div.input_wrapper>input').clear()
    driver.find_element_by_css_selector('div.input_wrapper>input').send_keys('寺')
    time.sleep(1)


    driver.find_element_by_css_selector('div.input_wrapper>span').click()

    time.sleep(3)

    #reponse_html_page = driver.page_source

    #style="overflow: auto; height: 576px;"

    #reponse_html_page = driver.find_element_by_css_selector('div.list>ul').text

    # print(type(reponse_html_page))
    #print(driver.page_source)

    pageSource_list = []

    pageSource_list.append(driver.page_source)

    for i in range(4):
        driver.find_element_by_css_selector('div.m-pagination>a.pg-next').click()
        time.sleep(3)
        #print(driver.page_source)
        pageSource_list.append(driver.page_source)

    return pageSource_list


if __name__ == "__main__":
    get_temple_page_source()

经分析得知,在第五页之前的寺院有一定的评论量,第五页之后的寺院评论量几乎为0,无抓取价值,遂舍弃

尝试抓取的过程中出现的一些状况

这里写图片描述

本应该是这样的

这里写图片描述

加上sleep(),让spider睡一会就好了

这里写图片描述

初步抓取结果

这里写图片描述

使用bs4处理html文档并放入MongoDB的小测试:

这里写图片描述

这里写图片描述

Pycharm的一个快捷键: shift+tab,将所选的代码块整体反向缩进

对搜索结果页面进行抓取的时候发生了字符编码错误:

#coding=utf-8
from bs4 import BeautifulSoup
import pymongo
import requests
from urllib import parse
import pprint
import random

def get_temple_detail_url(search_key_word):

    #temple_detail = TempleSpider['temple_detail']

    #http://www.mafengwo.cn/search/s.php?q=%E6%BD%AD%E6%9F%98%E5%AF%BA

    search_url = 'http://www.mafengwo.cn/search/s.php?q={}'.format(parse.quote(search_key_word, encoding='utf-8'))

    search_response = requests.get(search_url)

    bsObj = BeautifulSoup(search_response.text, 'lxml')

    print(bsObj)

    for i in bsObj.select_one('div[data-category="poi"]').find_all("div", class_="clearfix"):
        if '景点' in i.find("h3").get_text() and '北京' in i.find_all("li")[0].find("a").get_text():
            temple_detail_url = i.find("h3").find("a").get("href")
            data = {
                'temple_name': search_key_word,
                'temple_url': temple_detail_url
            }

            #print(data)
            #temple_detail.insert_one(data)


if __name__ == "__main__":
    get_temple_detail_url('潭柘寺')

这里写图片描述

这里写图片描述

解决方式如下:

这里写图片描述

详情参考:requests和BeautifulSoup中文编码转换心得
看样子应该是requests的编码方式出现了问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值