Mr-阿梓 2021-03-20 23:32 采纳率: 50%
浏览 93
已采纳

IT大佬救命,为什么我的列表内有括号,还有为什么会一个列表内嵌套了列表?


 

import urllib.request
from bs4 import BeautifulSoup
import re
from openpyxl import Workbook
import xlwt

def main():
    getdata()
    savadata="大学学校网.xlsx"
    datalist=getdata()


findwz=re.compile(r'<td class="first">(.*)</td>')
findlink=re.compile(r'<td>(.*)<a href="(.*?)"')


def webdata():
    url="http://www.hao123.com/edu"
    header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.57"}
    req=urllib.request.Request(url=url,headers=header)
    html=""
    try:
        respond=urllib.request.urlopen(req)
        html=respond.read().decode("utf-8")
    except urllib.error.URLError as e :
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    #print(html)
    return html

def getdata():
    dict={}
    datalist=[]
    html=webdata()
    soup=BeautifulSoup(html,"html.parser")
    for item in soup.find_all('tr'):
        data=[]
        item=str(item)
        wz=re.findall(findwz,item)
        data.append(wz)
        link=re.findall(findlink,item)
        data.append(link)
        print(data)




if __name__=="__main__":
    main()




 
  • 写回答

2条回答 默认 最新

  • 我不喜欢这个世界 2021-03-21 23:57
    关注

    findwz=re.compile(r'<td class="first">(.*)</td>')

    我只需要匹配符合的字符串中的一个值,但是可能会匹配到多个字符串。那就意味着每个字符串中都有一个值

    wz=re.findall(findwz,item)

    data.append(wz)

    data是列表,wz又是列表,把wz追加进data,那就是列表套着列表了

     

    findlink=re.compile(r'<td>(.*)<a href="(.*?)"')

    我只需要匹配符合的字符串中的两个值,但是可能会匹配到多个字符串。那就意味着每个字符串可能都有两个值

    link=re.findall(findlink,item)

    data.append(link)

    因为有两个值,且每两个值都属于匹配到的一个字符串内,那两个值为一组属于一个字符串。

    那就是[("1","2"),("1","2"),("1","2"),("1","2")]这种形式

    每("1","2")为一组,代表一个字符串内的。如果不这样表示,这样表示的话[1,2,1,2,1,2,1,2]就没啥意义了

     

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?