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()
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]就没啥意义了
请描述清楚: