先上代码:
import urllib.request as ur
from bs4 import BeautifulSoup as bs
origin="https://nhentai.net/g/200103/" #目标漫画所在的url
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
}
for i in range(1,10000):
url=origin+str(i)
try:
req=ur.Request(url=url,headers=headers)
result=ur.urlopen(req).read().decode('utf-8')
except:
break
else:
html=bs(result)
img=html.select('section#image-container img')[0]
imgurl=img.get('src')
ur.urlretrieve(imgurl, filename=str(i)+'.jpg', reporthook=None, data=None)
说一下这两个库的主要函数,先是urllib,在Python3中,它的导入方法和Python2不一样,导入语句为import urllib.request as ur。它的作用主要是获取一个html页面中的全部内容,实现这个功能只需要两句话:
req=ur.Request(url=url,headers=headers)
result=ur.urlopen(req).read().decode('utf-8')
注:其实很多情况下直接用第二句话就成,将req换成目标网站的url就可以了。但是在这里会报错,错误如下:
HTTP Error 403: Forbidden
原因就是nhentai.net禁止网页爬虫,直接爬取的话由于没有浏览器的信息,所以会被判定为爬虫。解决办法就是加个headers伪装一下。headers的信息获取很简单,随便用浏览器打开一个网站,右键审查元素,选择network,刷新网站,就会显示浏览器发送的http请求,copy一下就好。当然光是把整个html页面弄下来是不够的,这里还需要用BeautifulSoup来处理,引入代码是
from bs4 import BeautifulSoup as bs。几个重要的语句:
html=bs(result)将爬取的结果用BeautifulSoup来解析。html.select('CSS选择器')选择特定的元素,语法和CSS选择器一样,注意这里返回的是列表。- 用get方法获取属性值,如
img.get('src') - 用
get_text()方法获取文本内容
try:
except:
else:
最后是如何保存特定内容,这里是图片。所用的语句是
ur.urlretrieve(imgurl, filename=str(i)+'.jpg', reporthook=None, data=None)。该函数说明如下: urlretrieve(url, filename=None, reporthook=None, data=None) url是文件的网址,filename是保存文件的地址,reportbook是进度条,data是要post的数据,这里只关心前两个。