鱼C论坛

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

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

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

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

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

x
本帖最后由 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]             #需要给一个规则,正则表达式查找指定字符串获取第一个【0】
            data.append(link)                               #添加链接
            imgSic = re.findall(findImgSrc,item)[0]
            data.append(imgSic)                             #添加图片
            titles = re.findall(findTitle,item)             #片名可能只有一个中文名
            if(len(titles) == 2):
                ctitle = titles[0]              #添加中国名
                data.append(ctitle)
                otitle = titles[1].replace("/","")  #去掉无关符号
                data.append(otitle)            #添加外国名
            else:
                data.append(titles[0])
                data.append(" ")           #外国名字没有也要留空
            rating = re.findall(findRating,item)[0]
            data.append(rating)             #添加评分

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

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

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


            bd = re.findall(findBd,item)[0]
            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("爬取完毕!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 22:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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