18 案例_主题列表分页抓取
- 需要获取最大页数
- 分析
最后一个li标签
最后一个li标签
- 写求取最大页码的代码
def get_max_page(self,html):
tree = etree.HTML(html)
pages = tree.xpath('//ol[@class="page-main"][1]/li')
#只有一页的情况
if len(pages) == 1:
return 1
#页面在最后一页时最大的页码
last_page_test = pages[len(pages)-1].xpath('a')[0].text
#如果页面不在最后一页
if last_page_test == '>>':
return int(pages[len(pages)-2].xpath('a')[0].text)
return last_page_test
- 代码
import re
import requests
from lxml import etree
class PostListCrawler:
domain = "https://www.newsmth.net"
def get_content(self,board_url,page):
querystring = {"ajax": "", "p": str(page)}
url = self.domain + board_url
r = requests.get(url,params=querystring)
return r.text
def get_max_page(self,html):
tree = etree.HTML(html)
pages = tree.xpath('//ol[@class="page-main"][1]/li')
#只有一页的情况
if len(pages) == 1:
return 1
#页面没有在最后一页时最大的页码
last_page_test = pages[len(pages)-1].xpath('a')[0].text
#如果页面在最后一页
if last_page_test == '>>':
return int(pages[len(pages)-2].xpath('a')[0].text)
return last_page_test
if __name__ == "__main__":
plc = PostListCrawler()
content = plc.get_content('/nForum/board/AutoWorld',1)
print(plc.get_max_page(content))
结果:
- 简化代码
import re
import requests
from lxml import etree
class PostListCrawler:
domain = "https://www.newsmth.net"
def get_content(self,board_url,page):
querystring = {"ajax": "", "p": str(page)}
url = self.domain + board_url
r = requests.get(url,params=querystring)
#方便调用
self.html = r.text
self.tree = etree.HTML(r.text)
def get_max_page(self):
tree = etree.HTML(self.html)
pages = self.tree.xpath('//ol[@class="page-main"][1]/li')
#只有一页的情况
if len(pages) == 1:
return 1
#页面没有在最后一页时最大的页码
last_page_test = pages[len(pages)-1].xpath('a')[0].text
#如果页面在最后一页
if last_page_test == '>>':
return int(pages[len(pages)-2].xpath('a')[0].text)
return last_page_test
if __name__ == "__main__":
plc = PostListCrawler()
content = plc.get_content('/nForum/board/AutoWorld',1)
print(plc.get_max_page())