jiuridi 发表于 2020-4-17 19:26:30

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

本帖最后由 jiuridi 于 2020-4-17 19:52 编辑

import re                            # 正则表达式,进行文字匹配
import urllib.request, urllib.error# 制定URL,获取网页数据
import xlwt                        # 进行excel操作
import sqlite3                     # 进行数据库操作
from bs4 import BeautifulSoup      # 网页解析,获取数据


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

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


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

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

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

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

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

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

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


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

            judgeNum = re.findall(findJudge,item)
            data.append(judgeNum)         #添加评价人数

            inq = re.findall(findInq,item)

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


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


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



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

      "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"

    }
                            #用户代理,伪装成浏览器
    request = urllib.request.Request(url,headers=head)
    html = " "
    try:
      response = urllib.request.urlopen(request)
      html = response.read().decode("utf-8")
      # print(html)
      # print(type(html))
    except urllib.error.URLError as e:
      if hasattr(e,"code"):
            print(e.code)
      if hasattr(e,"reason"):
            print(e.reason)
    return html




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

if __name__ == "__main__":          #当程序执行时
#调用函数
    main()
    #init_db("movietest.db")
    print("爬取完毕!")
页: [1]
查看完整版本: 请问我这段代码为什么不执行正则表达式,还有奇怪报错?