利用post请求爬取动态评论

news/2024/7/19 12:44:39 标签: python, 爬虫, json

任务:利用post请求爬取动态评论

实现:

       酒店网站的评论是动态的,是实时更新的,所以在网页源代码里只有一部分,所以要想得到所有的就得在网页的检查元素里(我的是火狐浏览器),右击检查元素,如下图




       一般get请求就可以得到网页源代码里边我们想要的,但是不能得到动态信息,所以要用post请求,此时我们需要参数里面的listRequest.hotelIDs,这是为什么呢?因为在网页源代码里,每家酒店是以不同的data-hotelid来区分,每个酒店都有不同的data-hotelid,post请求可以得到如下



代码如下

#使用的库

import urllib
import requests
import time
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

#这个请求头其实不用写这么多,最重要是User-Agent必须要有

headers={'Host': 'hotel.elong.com',
'Connection': 'keep-alive',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
'Upgrade-Insecure-Requests':'1',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/json;charset=UTF-8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
}

#用一个循环来得到hotelids

while True:
   d=requests.post(url,data=data,headers=headers)
        j = json.loads(d.text)
        p=j['value']
        q=p['hotelIds']
        q=q.split(",")
        list.append(q)
        data['listRequest.pageIndex'] += 1
        if data['listRequest.pageIndex']==2:
            break
list=sum(list,[])
#这个list里都是hotelids
print list

#接下来就可以定义一个函数来抓取评论了
def get_information():
    list1=[]
    list2=[]
    for q in list:
        z='http://hotel.elong.com/'+q
        url1 = 'http://hotel.elong.com/ajax/detail/gethotelreviews/?hotelId=' + q
        list1.append(z)
        list2.append(url1)
    for p in list1:
        page=urllib.urlopen(p)
        soup = BeautifulSoup(page,"html.parser")
        for tag in soup.find_all('h1',class_="breadcrumb"):
            f= tag.get_text(strip=True)
            print f
            file = open(f +".txt","w")
        for tag in soup.find_all('div',id="hotelContent"):
            ff= tag.get_text()
            ff=ff.replace(" ","")
            file.write(ff)
    for q in list:
        url1 = 'http://hotel.elong.com/ajax/detail/gethotelreviews/?hotelId=' + q
        for i in range(0,4):
            url2=url1+'&recommendedType=0&pageIndex='+str(i)
            list2.append(url2)
    print list2
    for p in list2:
        print p
        request=urllib2.Request(p)
        response=urllib2.urlopen(request)
        t=response.read()
        d = json.loads(t)
        for p in  d["contents"]:
            content = p["content"].encode('utf-8')
            time = p["createTimeString"].encode('utf-8')
            print time
            file.write("评价内容"+'\n'+content+'\n'+"评论时间:"+time+'\n')
            time.sleep(1)

结果





http://www.niftyadmin.cn/n/787709.html

相关文章

高等数学—元素和极限-实数的元素个数

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

【代码笔记】iOS-UIView的placeholder的效果

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController <UITextViewDelegate> {UITextView *psTextView;UILabel *pslabel; } end RootViewControll…

爬虫python爬取页面请求_python爬虫爬取get请求的页面数据代码样例

#!/usr/bin/env python#-*- coding:utf-8 -*-#导包 importurllib.requestimporturllib.parse#如下两行代码表示忽略https证书&#xff0c;如果请求不是https则该两行代码可不用。 importssl ssl._create_default_https_contextssl._create_unverified_contextif __name__ &quo…

《人件》阅读笔记3

第4章 质量——如果时间许可 我们都有一种强烈的倾向&#xff0c; 就是把我们的自尊与我们生产的产品联系在一起——不是产品的数量而是产品的质量。&#xff08;部分原因是&#xff0c;虽然普普通通的材料可能正是在给定的情况下所需要的&#xff0c;但是人们对生产出大量的这…

retinanet50预训练权重_医学图像分割(一):SD-Net网络和ECB纠错训练机制

论文&#xff1a;Error Corrective Boosting for Learning Fully Convolutional Networks with Limited Data会议&#xff1a;MICCAI -2017 (MICCAI 是医学影像分析研究领域的顶尖年会)1、contributions:(1)提出了一个SD-Net的网络架构&#xff0c;十分适合分割brain图像(2)提出…

理解Java里面的jvm,jre,jdk的区别和联系

有时候越是基础的问题&#xff0c;越是容易被我们忽视&#xff0c;比如标题上的问题&#xff0c;感觉挺简单&#xff0c;但真正让解释一下&#xff0c;未必能够说的很清楚&#xff0c;其实这个问题在Oracle官网的Java的文档里面解释的非常清晰&#xff0c;看官网下面的一张图&a…

高等数学—元素和极限-自然数个数少于实数个数

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

tesseract简单介绍和训练

Python--图片文字识别--Tesseract 1、tesseract介绍 Tesseract&#xff0c;一款由HP实验室开发由Google维护的开源OCR&#xff08;Optical Character Recognition , 光学字符识别&#xff09;库&#xff0c;目前由谷歌赞助&#xff0c;它可以通过训练识别出任何字体&#xff0c…