先上代码:
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的数据,这里只关心前两个。