Crossin的编程教室

标题: 页面不存在,统一转入一个导航页面,请问如何跳出? [打印本页]

作者: Jacky    时间: 2019-5-24 17:31
标题: 页面不存在,统一转入一个导航页面,请问如何跳出?
本帖最后由 Jacky 于 2019-5-24 17:36 编辑

新手刚接触爬虫,因为第一页和后续页面的规则不一致,我是这样处理的:
  1. def page_start(*page_start_num*):
  2. ​    if page_start_num == 1:
  3. ​        url = base_url
  4. ​        headers = {
  5. ​            'Referer': url,
  6. ​            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
  7. ​            'cookie': 'UM_distinctid=16adf1c99906c-0650f771e023bc-353166-1fa400-16adf1c999334f; CNZZDATA1255357127=703661195-1558519406-%7C1558519406',
  8. ​        }
  9. ​    else:
  10. ​        url = base_url[0:-5] + '_' + str(page_start_num) + '.html'
  11. ​        headers = {
  12. ​            'Referer': url,
  13. ​            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36',
  14. ​            'cookie': 'UM_distinctid=16adf1c99906c-0650f771e023bc-353166-1fa400-16adf1c999334f; CNZZDATA1255357127=703661195-1558519406-%7C1558519406',
  15. ​        }
  16. ​    print('当前页面路径:%s' % url)
  17. ​    return url, headers


  18. def get_page(*url*, *headers*):
  19. ​    try:
  20. ​        response = requests.get(url, *headers*=headers)
  21. ​        response.encoding = 'utf-8'
  22. ​        if response.status_code == 200:
  23. ​            return response.text
  24. ​    except RequestException:
  25. ​        print('请求网页失败')
  26. ​        return None

  27. def parse_page(*html*):
  28. ​        soup = BeautifulSoup(html, 'lxml')
  29. ​        *# print(soup.prettify())*
  30. ​        print(soup.title.string)
  31. ​        title = soup.title.string
  32. ​        img_info = soup.find_all(*name*='img', *attrs*='content_img')
  33. ​        for i in range(len(img_info)):
  34. ​            pic = img_info.attrs['src']
  35. ​            yield{
  36. ​                'title': title,
  37. ​                'url': pic,
  38. ​                'num': i+1
  39. ​            }
复制代码
后续有多少页通过“page_start_num”控制。
代码很丑陋,但是可以运行。但是有时会遇到网站本身的问题,有些页面不存在。
网站的处理方式是不存在的页面,都转到一个专门的导航页面。
这时,代码运行会报错如下:
  1.    File "C:\Python\Python37\lib\site-packages\bs4\__init__.py", line 245, in __init__
  2.     elif len(markup) <= 256 and (
  3. TypeError: object of type 'NoneType' has no len()
复制代码
抓取会终止,请问各位,要如何处理这种异常?如何让代码跳过这个url,继续抓取后续的url?
谢谢!



作者: crossin先生    时间: 2019-5-24 19:40
找到报错的位置,放在try里面,用异常处理跳过即可

你报错没截全,看不出报错在哪里,看起来是 beautifulsoup 处理那里报错的




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5