python爬虫 完整代码

python爬虫 完整代码这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

大家好,又见面了,我是你们的朋友全栈君。

python爬虫 完整代码

使用Python爬取豆瓣top250的相关数据,并保存到同目录下Excel

import re
import urllib.error
import urllib.request

import xlwt
from bs4 import BeautifulSoup


def main():
    baseurl ="https://movie.douban.com/top250?start=/"

    datelist = getDate(baseurl)
    savepath=".\\douban.xls"
    saveDate(datelist,savepath)

    # askURL("https://movie.douban.com/")

findlink = re.compile(r'<a href="(.*?)">')
findimg = re.compile(r'<img.*src="(.*?)"',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>')

def getDate(baseurl):
    datalist =[]
    for i in range(0,10):
        url=baseurl+str(i*25)
        html=askURL(url)
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):
            data = []
            item = str(item)
            link = re.findall(findlink,item)[0]
            data.append(link)
            img=re.findall(findimg,item)[0]
            data.append(img)
            title=re.findall(findtitle,item)[0]

            rating=re.findall(findrating,item)[0]
            data.append(rating)
            judge=re.findall(findjudge,item)[0]
            data.append(judge)
            inq=re.findall(findinq,item)

            if len(inq)!=0:
                inq=inq[0].replace("。","")
                data.append(inq)
            else:
                data.append(" ")
            print(data)
            datalist.append(data)
        print(datalist)
    return datalist

def askURL(url):
    head = { 
   "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 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 saveDate(datalist,savepath):
    workbook = xlwt.Workbook(encoding='utf-8')
    worksheet = workbook.add_sheet('豆瓣电影',cell_overwrite_ok=True)
    col =("电影详情","图片","影片","评分","评价数","概况")
    for i in range(0,5):
        worksheet.write(0,i,col[i])
    for i in range(0,250):
        print("第%d条" %(i+1))
        data=datalist[i]
        for j in range(0,5):
            worksheet.write(i+1,j,data[j])

    workbook.save(savepath)



if __name__ == '__main__':
    main()
    print("爬取完毕")

直接复制粘贴就行。
若要更改爬取网站,则需要更改URL以及相应的html格式(代码中的“item”)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134562.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 并发编程篇:java 高并发面试题

    并发编程篇:java 高并发面试题1、线程与进程进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是…

    2022年5月6日
    38
  • cas单点登录实现原理(用户登录测试用例)

    转载地址http://www.cnblogs.com/lihuidu/p/6495247.html1、基于Cookie的单点登录的回顾    基于Cookie的单点登录核心原理:   将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次。   该方式缺…

    2022年4月14日
    132
  • python第三方库的安装方法有哪些_python第三方库在哪个文件夹

    python第三方库的安装方法有哪些_python第三方库在哪个文件夹简单来说如果是系统自带的python,会使用dist-packages目录;如果你手动安装python,它会直接使用目录site-packages。这允许你让两个安装隔离开来。dist-packages:系统自带的pythonsite-packages:自己安装的pythonPython的包的安装路径如下1、系统自带python系统自带软件管理器安装,模块将被安装到dist-packages相…

    2022年10月14日
    0
  • JAVA枚举类型(Enum)的使用[通俗易懂]

    JAVA枚举类型(Enum)的使用[通俗易懂]在现实社会中,有些类的实例对象是固定的。例如季节,只有春夏秋冬。如果你创建了一个season类,你当然有义务维护这个类的实例对象只能是春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)这四个。这个时候就体现出枚举类的作用了,java中枚举类型就是针对这样的场景需求所设计的。/***枚举类的后缀建议为Enum,枚举类型的实例对象建议全大写(这样做符合JAVA的…

    2022年10月9日
    0
  • 虚拟现实开发概述_简要说明虚拟现实开发步骤

    虚拟现实开发概述_简要说明虚拟现实开发步骤VR开发

    2022年9月13日
    0
  • SQL数据库学习之路(一)

    SQL数据库学习之路(一)1.数据库简介(一个放数据的仓库)解决的问题:持久化存储,优化读写,保证数据的有效性关系型数据库:基于E-R模型(实体-联系图EntityRelationship)使用sq|语言进行操作(SQ

    2022年8月2日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号