使用Python爬取马蜂窝网站的游记和照片

使用Python爬取马蜂窝网站的游记和照片


特殊原因需要在马蜂窝上爬取一些游记和照片作为后续分析处理的数据,参考网上一些类似的爬虫文章,自己尝试了一下,这次爬取的是马蜂窝上所有有关苏州的游记(包括游记内容和照片)

在这里插入图片描述
我们进入一个游记,观察它的html,定位照片和游记内容所在的标签
照片所在标签
游记内容所在标签
知道了照片和游记内容的标签位置后,我们就可以利用Xpath定位到我们想要爬取的内容然后将它抓取下来了

#保存照片
def savePhoto(soup,path):
    img=soup.xpath('//img/@data-src') #这里改为照片节点的路径表达式
    total_img=0
    for myimg in img:
	    total_img += 1
	    print(myimg)
	    urllib.request.urlretrieve(myimg,path+'%s.jpg'%total_img)
    print("总共保存"+str(total_img)+"张照片")
#保存文本
def saveText(soup,path):
    path=path+'游记内容.txt'
    file = open(path, 'w', encoding='utf-8') #将游记内容另存为txt文档
    time=soup.xpath('//ul/li[1]/text()') #这里抓取时间
    for t in time:
        t=re.sub('\\n','',t) 
        t=re.sub('\\.','',t)
        t=t.strip()
        file.write(t+'\n')

    text=soup.xpath('//div/p/text()')
    for mytext in text:
        mytext=re.sub('\\r\n','',mytext) 
        mytext=re.sub('\\.','',mytext)
        mytext=mytext.strip()
        file.write(mytext+'\n')
    file.close

因为要爬取所有有关苏州的游记,所以我们要遍历所有的游记,但是观察游记的网址,例如:http://www.mafengwo.cn/i/18949141.html,这里的数字不同游记也就不同,但是观察发现这些数字是随机的没有规律可循,我们不能通过改变这些来达到遍历每个游记的目的。但是我们可以返回上一级页面观察它的地址,http://www.mafengwo.cn/yj/10207/2-0-1.html,仔细观察不难发现😎,这里的1是第一页,我们可以通过改变它来达到遍历每一页,然后我们可以在每一页上抓取该页上的游记链接。
在这里插入图片描述

#页数范围
min = 1
max = 2

#遍历所有游记
for i in range(min,max):
    url="http://www.mafengwo.cn/yj/10207/2-0-"+str(i)+".html"
    request=urllib.request.Request(url,data=None,headers=headerS)
    response=urllib.request.urlopen(request)
    response=response.read()
    buff = BytesIO(response)
    response = gzip.GzipFile(fileobj=buff)
    soup = etree.HTML(response.read().decode('utf-8'))
    hrefs=soup.xpath('//li/h2/a[@class="title-link"]/@href')
    for href in hrefs:
        #print(href) #/i/18970390.html
        url="http://www.mafengwo.cn"+str(href)
        request=urllib.request.Request(url,data=None,headers=headerS)
        response=urllib.request.urlopen(request)
        response=response.read()
        buff = BytesIO(response)
        response = gzip.GzipFile(fileobj=buff)
        soup = etree.HTML(response.read().decode('utf-8'))
        print("连接成功!")
        start(soup,path)

运行就可以将游记保存到目标文件夹下了👌
在这里插入图片描述
在这里插入图片描述
但是同一个headers使用过多会被网站发现,自己尝试通过fake_useragent这个包来随机生成但是没有成功🙃(裂开)。。。

感谢阅读😬

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值