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'而拒绝访问,这里也是可以通过更改其中的值来达到访问的目的。
相关阅读
推荐使用requests库,相比urllib使用要简介的多 requests向目标站点发送请求,获得一个HTTPresponse响应 import requests requests
前面一篇,我们介绍了三种带参数的请求类型划分。这篇,介绍通过github上的API,来举例一个params参数接口的演示。先找到如下图位置