用bs4和requests库,抓取nga舰队Collection萌战玩家投票

import requests
from bs4 import BeautifulSoup


url = 'http://bbs.ngacn.cc/read.php?tid=13428951'
req = requests.get(url)
j = req.cookies.get_dict()
k = int(j['lastvisit'])-1
cookies_ = {'guestJs': str(k)}
requests.utils.add_dict_to_cookiejar(req.cookies, cookies_)
#如果直接抓去nga页面我们的状态码会返回403,如果我们打开网页检查cookies我们会发现,我们用requests库get方法得到页面的cookies和浏览器的不一致
#,其中缺少了'guestJs'属性,其值为'lastvisit'-1,至于为什么会出现这种原因暂不清楚,如果有了解的人希望可以在评论中写下原因。

(咨询了一下,这里有人说可能是js里面setcookie了)

def getHTMLText(url):
    try:
        r = requests.get(url, cookies=req.cookies)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''


def parsePage(html):
    try:
        soup = BeautifulSoup(html, 'lxml')
        sub_soup = soup.find_all('span', class_='postcontent ubbcode')
        return sub_soup
    except:
        return ''


def parseTag(soup):
    for i in range(len(soup)):
            print(soup[i].text)


def main():
    for i in range(1,61):
        url = 'http://bbs.ngacn.cc/read.php?tid=13428951'+'&page='+ str(i)
        html = getHTMLText(url)
        soup = parsePage(html)
        parseTag(soup)


main()

这里print出了所有的结果,通过这个例子希望给出一个爬虫框架,通过定义函数的方式去对网页进行爬取,否则修改代码的时候可能会出乎意料的麻烦。以上是通过之前介绍的两个库写的一个例子。这里关于票数统计就不写了,不在之前介绍的两个库的范围之内,有兴趣的可以自己写一下。

顺便一提,抓取网页的时候有时候会因为,request.headers中的'user-agent'是'python-requests'而拒绝访问,这里也是可以通过更改其中的值来达到访问的目的。

猜你喜欢

转载自blog.csdn.net/Canon__/article/details/79620060
今日推荐