zoukankan      html  css  js  c++  java
  • 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科

    我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带http:baidu这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再pop了.
    最后我把代码放上去.为了突出问题我选的开始网址很特殊他没有子链接.
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    import re
    import random


    base_url = "https://baike.baidu.com"
    his = ["/item/%E9%B8%A1%E7%9F%A2%E8%97%A4/931175?fromtitle=%E9%B8%A1%E5%B1%8E%E8%97%A4&fromid=374872"]

    for i in range(200):
    url = base_url + his[-1]

    print (77777777)

    html = urlopen(url).read().decode('utf-8')
    print (8888888888)
    soup = BeautifulSoup(html, features='lxml')
    print (9999999)

    print(i, soup.find('h1').get_text(), ' url: ',base_url+ his[-1])

    # find valid urls
    sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/item)/item/(%.{2})+$")})


    print ('爬到了'+str(i+1))
    if len(sub_urls) != 0 :

    his.append(random.sample(sub_urls, 1)[0]['href'])
    else:
    if len(his)==1:
    pass
    else:
    # no valid sub link found
    his.pop()



    #到底错在了哪里???为什么多跑几遍,很小概率可能会发生1.无限重复同一个url 2.死循环 3.当然也有可能无限2个url来回跳
    print ('666666')
    #已经修改好了,有错误可以继续回复我

  • 相关阅读:
    js兼容性——获取当前浏览器窗口的宽高
    pip 换源
    5 二分查找 算法
    顺序查找 冒泡 快排 等
    4 顺序表和链表
    python垃圾回收机制
    3 栈 队列 双头队列
    2 数据结构的性能分析 timeit
    1 时间复杂度
    线程池 爬取一本小说
  • 原文地址:https://www.cnblogs.com/zhangbo2008/p/8413789.html
Copyright © 2011-2022 走看看