|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- from urllib import request
- from urllib import parse
- from bs4 import BeautifulSoup
- def 读取网页(页数,关键词):
- 关键词 = parse.urlencode({'tag':关键词})
- url = ''.join(['https://www.pixiv.net/novel/tags.php?',关键词,'&order=date_d&mode=safe&p=%s'%页数])
- req = request.Request(url)
- req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')
- response = request.urlopen(url)
- html = response.read()
- soup = BeautifulSoup(html,"html.parser")
- return soup
- def main():
- 记录 = []
- 每页个数 = 12
- page = 1
- keyword = input('输入要查询的关键字: ')
- soup = 读取网页(1,keyword)
- 总数 = int(soup.find('span',class_='count-badge').text.replace('件',''))
- 总页数 = (总数+每页个数-1)//每页个数
- while 1:
- for each in soup.find_all('div',class_='_ui-tooltip bookmark-box'):
- if 'response'not in each.a['class'][0]:
- 书签 = int(each.text)
- ID = each.a['href'].split('id=')[1]
- 记录.append((书签,ID))
- if page == 总页数:
- print('结束')
- break
- page += 1
- soup = 读取网页(page,keyword)
-
- 记录.sort(reverse=True)
- with open('排序.txt','a') as f:
- for each in 记录:
- f.writelines('https://www.pixiv.net/novel/show.php?id=%s : %s个书签\n'%(each[1],each[0]))
- if __name__ == '__main__':
- main()
复制代码
这是我写的将pixiv的小说通过书签数量排序的代码。windows 10,python 3.6.2.能够正常运行,获取小说id和书签数量都能实现.但是在翻页上出了问题。
从网页上看,pixiv的URL是将
https://www.pixiv.net/novel/tags.php?tag=日常の謎&order=date_d&p=1 最后的p=1改成p=n来翻页的。但这只在目标小说少于10页时有效,当页数大于10时,从11页开始每一页的URL都会指向第十页.而直接在浏览器上打开11页,源代码是正常的11页内容,network里的Request URL也是p=n。而这个有196页的小说https://www.pixiv.net/novel/tags.php?tag=氷菓o&rder=date_d&p=1,从11页开始都只能获取第十页的内容.
另外,我修改了关于这个网站的host,不知道有没有什么影响。
请问这种情况要怎么解决? |
|