前期的数据爬取及分类整理

前期的数据爬取及分类整理

from bs4 import BeautifulSoup
import re
import urllib.request

def main():
    baseurl = "https://movie.douban.com/top250?start=0&filter="
    #1.爬取网页
    datalist = getData(baseurl)
    savepath =r".豆瓣电影top250.xls"#./:保存至当前位置。.:保存至文件路径
    #3.保存数据
    saveData(savepath)

#创建正则表达式的规则:匹配掉什么?留下的是什么??
#影片详情连接的规则
findlink = re.compile(r'<a href="(.*)">') #创建正则表达式,表示规则 (.*?):网站都是字符串表示的,来表示任意的字符串
#所设立的规则中利用正则表达式的是即为所要提取的内容
#影片图片的提取
findimage = re.compile(r'<img .* src="(.*?)"/>',re.S) #re.S让换行符包含在字符中,进行无差别的匹配
#影片的片名
findname = re.compile(r'<span .*>(.*?)</span>')
#影片的评分
findscore = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#影片的简介
summary = re.compile(r'<p class="">(.*?)</p>',re.S) #换行符很重要!!!!

#爬取网页
def getData(baseurl):
    datalist = []

    #对网址进行加工
    for i in range(0,1): #调用获取页面信息10次
        url = baseurl + str(i*25)#需要对url的样式进行观察并总结其中的规律
        html = askURL(url)#保存获取到的额网页源码


    #2.逐一解析数据
    data = []
    soup = BeautifulSoup(html,"html.parser")#解析器
    for item in soup.find_all("div",class_="item"): #查找符合要求的字符串,形成列表??

        item = str(item)#是有对数据的类型进行字符串装换的啊!!!


        link = re.findall(findlink,item)[0] #re库用来通过正则表达式查找指定的字符串,利用规则进行匹配
        data.append(link)
        image = re.findall(findimage, item)
        data.append(image)
        #对标题进行加工
        titles = re.findall(findname, item)
        if (len(titles)==2):
            ctitles = titles[0]
            data.append(ctitles)
            otitles = titles[1].replace("/",'')
            data.append(otitles)
        else:
            data.append(titles[0])
            data.append(" ")#外文名留空


        vieos_summary = re.findall(summary,item)[0] #这里肯定还是字符串类型!!
        vieos_summary = re.sub(r'<br/>(s+)?'," ",vieos_summary)  # 匹配空格 ,此处设立的规则是你所要调换的对象,
        # 问题如果前后没有标识物,是否还可以(可以的)
        vieos_summary = re.sub("/"," ",vieos_summary)
        vieos_summary = re.sub(" ",'',vieos_summary)
        data.append(vieos_summary)
        print(data)
        break

    return datalist


#爬取网页内容
def askURL(url):#传一个参数

    head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"}
    #头部信息,伪装部分成浏览器需要的必要信息
    request = urllib.request.Request(url,headers=head)

    html = ""
    try:
        response =urllib.request.urlopen(request)#发出请求返回一个对象
        html = response.read().decode("utf-8")
        # print(html)
    except urllib.error.URLError as e:#让程序更加健壮
        if hasattr(e,"code"):#分析出错类型
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

#保存数据
def saveData(savepath):
    pass


if __name__ == "__main__":#主函数
   main()

思考及整理( 残!!!待补充!!)

# 第一步简单的网页爬取
html = "https://movie.douban.com/top250?start=0&filter="
import urllib.request
import re

head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
        }
request = urllib.request.Request(html,headers = head)
respond = urllib.request.urlopen(request)#发出请求并返回一个对象
result = respond.read().decode("utf-8")
print(result)

'''
对于urllib,request爬取网页的步骤
1.研究url的规律,是单独的网页信息还是有各种连接的
2.伪装成浏览器
3.利用Request函数进行信息的爬取此时应传入所伪装的头部信息
4.利用urlopen打开
5.读取所返回的对象(注意是否含有汉语,视情况是否加utf-8)
6.最后得出的结果应该是html类型???
'''

#第二步:对信息进行加工处理
from bs4 import BeautifulSoup
soup = BeautifulSoup(result,"result.parser") #对html进行解析
soup = soup.findall("div",class_="item") #找到完整的信息块
print(str(soup))
#利用正则表达式,对信息进行分类整理
findlink = re.compile(r'')


print(soup,type(soup))

小知识点

Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4种

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment
原文地址:https://www.cnblogs.com/yangzilaing/p/13792936.html