马蜂窝台湾全网游记爬取

一个同学要做毕业设计,需要马蜂窝网上关于台湾省的全部点评游记,正好很久没写这种小爬虫了,来练练手。
马蜂窝的游记可以在两个地方找到,一个是直接在首页上:http://www.mafengwo.cn/。

马蜂窝台湾全网游记爬取_第1张图片
Paste_Image.png

另外一个是: http://www.mafengwo.cn/yj/12684/

马蜂窝台湾全网游记爬取_第2张图片
Paste_Image.png

不同的是首页上会多一点,有250页,而第二种只有50页。当然选择第一种。
首先观察首页上的关于台湾的热门游记,1,2,3,4翻下来之后发现网址不会变,肯定是ajax了。F12,network之后开始找网址吧。

这里要着重提一下的是这次遇到的一个问题。

http://www.mafengwo.cn/note/pagelet/pagelet/recommendNoteApi?callback=jQuery18106049210270286689_1500622287438¶ms=%7B%22type%22%3A0%2C%22objid%22%3A0%2C%22page%22%3A11%2C%22ajax%22%3A1%2C%22retina%22%3A1%7D&_=1500622917079
这是找到的真实网址,返回的是json

马蜂窝台湾全网游记爬取_第3张图片
Paste_Image.png

第一次找的时候我看了一眼就跳过了,后来问了一个朋友才知道,这是网页中为了加快加载速度的一种方式,将鼠标放上去后,就可以看到它返回的东西了。这一点搞明白就简单了。将其中返回的网页后续取出,装上baseurl就是每一篇游记的地址了。如下:

    data2= re.findall(".*jQuery1810367880419551615_1500604060808\((.*?}})\);",data)[0]
    data3 = json.loads(data2)
    next_page =data3['data']['html']
    html = etree.HTML(next_page)
    infos = html.xpath('//div[@class="tn-image"]/a')
    for info in infos:
        link=info.xpath('@href')[0]
        all_link.append('http://www.mafengwo.cn/'+link)

最后在回到找到的网址,观察后面的params=%7B%22type%22%3A0%2C%22objid%22%3A0%2C%22page%22%3A11%2C%22ajax%22%3A1%2C%22retina%22%3A1%7D,有很多参数都是在下面可以找到的,其他都是不变的,只有page在变的。
page%22%3A11%2C%22,但是有很多数字,符号。多翻几页之后就可以明白是在3A~%2C之间的数字才是真的填写地点。
后续的就简单很多了。

果然还是知己知彼,方能写好爬虫。要补前端的知识了。

你可能感兴趣的:(马蜂窝台湾全网游记爬取)