鱼C论坛

 找回密码
 立即注册
查看: 1708|回复: 0

请问我这段代码为什么不执行正则表达式,还有奇怪报错?

[复制链接]
发表于 2020-4-17 19:26:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jiuridi 于 2020-4-17 19:52 编辑
  1. import re                            # 正则表达式,进行文字匹配
  2. import urllib.request, urllib.error  # 制定URL,获取网页数据
  3. import xlwt                          # 进行excel操作
  4. import sqlite3                       # 进行数据库操作
  5. from bs4 import BeautifulSoup        # 网页解析,获取数据


  6. def main():
  7.     baseURL = "https://movie.douban.com/top250?start=0"
  8.     #爬取网页
  9.     datalist = getData(baseURL)
  10.     # savepath = ".\\豆瓣电影top250.xls"
  11.     # 保存数据
  12.     #saveDate(savepath)

  13.     #askURL("https://movie.douban.com/top250?start=0")


  14. findLink = re.compile(r'<a href="(.*?)">')     #创建正则表达式对象,表示规则(字符串的模式)

  15. #影片图片
  16. findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)   #re.S 让换行符包含在字符中

  17. #影片片名
  18. findTitle = re.compile(r'<span class="title">(.*)</span>')

  19. #影片评分
  20. findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')

  21. #找到评价人数
  22. findJudge = re.compile(r'<span>(\d*)人评价</span>')

  23. #找到概况
  24. findInq = re.compile(r'<span class="inq">(.*)</span>')

  25. #找到影片的相关内容
  26. findBd = re.compile(r'<p class="">(.*?)</p>',re.S)


  27. #爬取网页
  28. def getData(baseurl):
  29.     datalist = []
  30.     for i in range(0,10):               #第九页    调用获取页面信息的函数,10次
  31.         url = baseurl + str(i*25)
  32.         html =askURL(url)
  33.         print(html)
  34.         print(type(html))              #保存获取到的源码
  35.         # 解析数据
  36.         # print(type(datalist))
  37.             #逐一解析
  38.         soup = BeautifulSoup(html, "html.parser")
  39.         for item in soup.find_all(class_="item"):
  40.             data = []     #保存一部电影的所有信息
  41.             #print(item)        #测试查看电影item
  42.             item = str(item)
  43.             link = re.findall(findLink,item)[0]             #需要给一个规则,正则表达式查找指定字符串获取第一个【0】
  44.             data.append(link)                               #添加链接
  45.             imgSic = re.findall(findImgSrc,item)[0]
  46.             data.append(imgSic)                             #添加图片
  47.             titles = re.findall(findTitle,item)             #片名可能只有一个中文名
  48.             if(len(titles) == 2):
  49.                 ctitle = titles[0]              #添加中国名
  50.                 data.append(ctitle)
  51.                 otitle = titles[1].replace("/","")  #去掉无关符号
  52.                 data.append(otitle)            #添加外国名
  53.             else:
  54.                 data.append(titles[0])
  55.                 data.append(" ")           #外国名字没有也要留空
  56.             rating = re.findall(findRating,item)[0]
  57.             data.append(rating)             #添加评分

  58.             judgeNum = re.findall(findJudge,item)[0]
  59.             data.append(judgeNum)           #添加评价人数

  60.             inq = re.findall(findInq,item)[0]

  61.             if len(inq) != 0:
  62.                 inq = inq[0].replace("。","")        #去掉句号
  63.                 data.append(inq)                    # 添加概述
  64.             else :
  65.                 data.append(" ")                   #没有也要加空


  66.             bd = re.findall(findBd,item)[0]
  67.             bd = re.sub("<br(\s+)?/>(\s)?"," ",bd)         #去掉<br/>
  68.             bd = re.sub("/"," ",bd)                        #去掉/
  69.             data.append(bd.strip( ))                       #去掉空格


  70.             datalist.append(data)                       #电影信息
  71.     print(datalist)
  72.     return datalist



  73. #得到指定一个URL的网页内容
  74. def askURL(url):
  75.     head = {

  76.         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0"

  77.     }
  78.                             #用户代理,伪装成浏览器
  79.     request = urllib.request.Request(url,headers=head)
  80.     html = " "
  81.     try:
  82.         response = urllib.request.urlopen(request)
  83.         html = response.read().decode("utf-8")
  84.         # print(html)
  85.         # print(type(html))
  86.     except urllib.error.URLError as e:
  87.         if hasattr(e,"code"):
  88.             print(e.code)
  89.         if hasattr(e,"reason"):
  90.             print(e.reason)
  91.     return html




  92. def saveDate(savepath):
  93.     print("save......")
  94.     #保存数据

  95. if __name__ == "__main__":          #当程序执行时
  96. #调用函数
  97.     main()
  98.     #init_db("movietest.db")
  99.     print("爬取完毕!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 14:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表