• 大小: 8KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-09
  • 语言: Python
  • 标签: Python3  

资源简介

根据爬到的"大众点评网"酒店主页的URL地址,自动抓取所有用户的"ID、name、评分、时间保存下来"我的 v2版本

资源截图

代码片段和文件信息

‘‘‘
程序名:   drdianping2_s
功能:    根据爬到的“大众点评网“酒店主页的URL地址,自动抓取所有用户的“ID、name、评分、时间保存下来“。
         (目前大众点评刚进去酒店主页默认是上海地区的酒店)
语言:    python3.4
创建时间: 2016-4-13
作者:     dairen
‘‘‘
import re
from collections import deque
import http.cookiejar
import urllib.request
import urllib.parse

def getOpener(head):
    # deal with the Cookies
    cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)
    header = []
    for key value in head.items():
        elem = (key value)
        header.append(elem)
    opener.addheaders = header
    return opener

#定义变量
queue = deque()
visited = set()
SleepNum = 0
count =1          # 处理的queue中url的数目
breaknumber = 0   # 计数,发生异常的url数

#先写输出文件的头
fileOut = “D:/rating.txt“
fileOp = open(fileOut ‘a‘ encoding=“utf-8“)
fileOp.write( “%12s\t%12s\t%20s\t%15s\t%15s\t%15s\t%15s\t\n“%(“hotelid““userid““username““rate_room““rate_service““rate_total““rate_time“))
fileOp.close()

#先把opener做出来

head = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko‘}
opener = getOpener(head)

#   www.dianping.com/shanghai/hotel/p2
#  大众点评进去有50页酒店,每页15家酒店,地址类似于上面
pagelist = range(151)
urlnum = 1

save_path = ‘D:\\hotelhomes.txt‘
fileOp = open(save_path ‘a‘ encoding=“utf-8“)

for k1 in range(050):
    tempurlpag = “http://www.dianping.com/shanghai/hotel/p“+str(pagelist[k1])
    #queuepag.append(tempurlpag)
    #下面对于当前页拿到每个酒店网址并加入队列
    op = opener.open(tempurlpag)
    if ‘html‘ not in op.getheader(‘Content-Type‘):
        continue
    data1 = op.read().decode(encoding=‘UTF-8‘)
    #  onclick=“window.open(‘/shop/2503441‘)
    #用转意符再把‘给转义了
    linkre = re.compile(r‘onclick=“window.open\(\‘(.*?)\‘\)‘ re.DOTALL).findall(data1)
    for k2 in range(0 len(linkre)):
        tempurlhotel = “http://www.dianping.com“ + linkre[k2]
        queue.append(tempurlhotel)
        fileOp.write(tempurlhotel+‘\n‘)
        #print(‘目前是第:  %d  页的第: %d  个酒店,其地址是 :%s‘%(k1+1k2+1tempurlhotel))
    print(‘第:  %d  页抓取完成!‘%k1)

fileOp.close()
print(“抓取上海地区各酒店主页完毕!\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n“)

while queue:
    tempurl = queue.popleft()  # 队首元素出队
    visited |= {tempurl}  # 标记为已访问
    try:
        # 酒店编号
        hotelid = tempurl.split(‘/‘)[4]
        # print(‘该酒店的hotelid是 : ‘ hotelid)

        # 拼凑出该酒店第一页“评论页面“的url
        url = tempurl+ “/review_more“
        # print(‘该酒店第一页“评论页面“的url是‘ url)

        op = opener.open(url)
        data = op.read()

        # save_path = ‘D:\\temp.out‘
        # f_obj = open(save_path ‘wb‘)
        # f_obj.write(data)
        # f_obj.close()

        data = data.decode(‘utf-8‘ ‘ignore‘)

        # 对于下面这段str匹配
        #    title=““>全部点评(1195)

        # 列表形式这里不是俩括号的意思,而是用转义符把1195外面的圆括号分开,flag为DOTALL可以匹配任何字符包括换行(newline)
        rate_number = re.compile(r‘全部点评\((.*?)\

评论

共有 条评论