本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。欢迎各位大佬点评!

在这里放上我爬取的数据的网页,我将它部署到云服务器了
http://www.zhazhalin.top:5000/
源码在GitHub上面,且相关介绍更加全面。链接如下
https://github.com/zhazhalin/doubanTop250Spider.git
或者点击如下链接
github链接地址
首先
今天是第一天写博客,感受到了博客的魅力,博客不仅能够记录每天的代码学习情况,并且可以当作是自己的学习笔记,以便在后面知识点不清楚的时候前来复习。这是第一次使用爬虫爬取网页,这里展示的是爬取豆瓣电影top250的整个过程,欢迎大家指点。

这里我只爬取了电影链接和电影名称,如果想要更加完整的爬取代码,请联系我。qq 1540741344 或者点击github链接地址 欢迎交流

开发工具: pycharm、chrome
分析网页
在开发之前你首先要去你所要爬取的网页提取出你要爬取的网页链接,并且将网页分析出你想要的内容。

在开发之前首先要导入几个模块,模块描述如下,具体不知道怎么导入包的可以看我下一篇内容

首先定义几个函数,便于将各个步骤的工作分开便于代码管理,我这里是分成了7个函数,分别如下:
@主函数入口

if __name__=="__main__":       #程序执行入口main()

@捕获网页html内容 askURL(url)
这里的head的提取是在chrome中分析网页源码获得的,具体我也不做过多解释,大家可以百度

def askURL(url):  #得到指定网页信息的内容 #爬取一个网页的数据# 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"}request=urllib.request.Request(url,headers=head)         #request对象接受封装的信息,通过urllib携带headers访问信息访问urlresponse=urllib.request.urlopen(request)                  #用于接收返回的网页信息html=response.read().decode("utf-8")                      #通过read方法读取response对象里的网页信息,使用“utf-8”return  html                                             #返回捕获的网页内容,此时还是未处理过的

@将baseurl里的内容进行逐一解析 getData(baseURL)
这里面的findlink和findname是正则表达式,可以首先定义全局变量

findlink=r'<a class="" href="(.*?)"'
findname=r'<span class="title">(.*?)</span>'
def getData(baseURL):dataList=[]                                     #初始化datalist用于存储获取到的数据for i in range(0,10):url=baseURL+str(i*25)html=askURL(url)                                    #保存获取到的源码soup=BeautifulSoup(html,"html.parser")              #对html进行逐一解析,使用html.parser解析器进行解析for item in soup.find_all("div",class_="item"):     #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的divdata=[]                                         #初始化data,用于捕获一次爬取一个div里面的内容item=str(item)                                  #将item数据类型转化为字符串类型# print(item)link=re.findall(findlink,item)[0]               #使用re里的findall方法根据正则提取item里面的电影链接data.append(link)                               #将网页链接追加到data里name=re.findall(findname,item)[0]               #使用re里的findall方法根据正则提取item里面的电影名字data.append(name)                               #将电影名字链接追加到data里# print(link)# print(name)dataList.append(data)                           #将捕获的电影链接和电影名存到datalist里面return dataList                                         #返回一个列表,里面存放的是每个电影的信息print(dataList)

@保存捕获的数据到excel saveData(dataList,savepath)

def saveData(dataList,savepath):                            #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包sheet=book.add_sheet("test",cell_overwrite_ok=True)     #创建工作表col=["电影详情链接","电影名称"]                           #列名for i in range(0,2):sheet.write(0,i,col[i])                             #将列名逐一写入到excelfor i in range(0,250):data=dataList[i]                                    #依次将datalist里的数据获取for j in range(0,2):sheet.write(i+1,j,data[j])                      #将data里面的数据逐一写入book.save(savepath)

@保存捕获的数据到数据库

def saveDataDb(dataList,dbpath):initDb(dbpath)                                          #用一个函数初始化数据库conn=sqlite3.connect(dbpath)                            #初始化数据库cur=conn.cursor()                                       #获取游标for data in dataList:                                   for index in range(len(data)):  data[index]='"'+data[index]+'" '                #将每条数据都加上""#每条数据之间用,隔开,定义sql语句的格式sql='''insert into test(link,name) values (%s)         '''%','.join (data)cur.execute(sql)                                    #执行sql语句conn.commit()                                       #提交数据库操作conn.close()print("爬取存入数据库成功!")

@初始化数据库 initDb(dbpath)


def initDb(dbpath):conn=sqlite3.connect(dbpath)cur=conn.cursor()sql='''create table test(id integer primary key  autoincrement,link text,name varchar )'''cur.execute(sql)conn.commit()cur.close()conn.close()

@main函数,用于调用其他函数 main()

def main():dbpath="testSpider.db"                             #用于指定数据库存储路径savepath="testSpider.xls"                          #用于指定excel存储路径baseURL="https://movie.douban.com/top250?start="   #爬取的网页初始链接dataList=getData(baseURL)saveData(dataList,savepath)saveDataDb(dataList,dbpath)

点击运行就可以看到在左侧已经生成了excel和DB文件

excel可以直接打开

DB文件双击之后会在右边打开

到这里爬虫的基本内容就已经结束了,如果有什么不懂或者想交流的地方可以加我 qq 1540741344

以下附上整个代码

import re                                   #网页解析,获取数据
from bs4 import BeautifulSoup               #正则表达式,进行文字匹配
import urllib.request,urllib.error          #制定URL,获取网页数据
import xlwt
import sqlite3findlink=r'<a class="" href="(.*?)"'
findname=r'<span class="title">(.*?)</span>'
def main():dbpath="testSpider.db"                             #用于指定数据库存储路径savepath="testSpider.xls"                          #用于指定excel存储路径baseURL="https://movie.douban.com/top250?start="   #爬取的网页初始链接dataList=getData(baseURL)saveData(dataList,savepath)saveDataDb(dataList,dbpath)
def askURL(url):  #得到指定网页信息的内容 #爬取一个网页的数据# 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"}request=urllib.request.Request(url,headers=head)         #request对象接受封装的信息,通过urllib携带headers访问信息访问urlresponse=urllib.request.urlopen(request)                  #用于接收返回的网页信息html=response.read().decode("utf-8")                      #通过read方法读取response对象里的网页信息,使用“utf-8”return  html                                             #返回捕获的网页内容,此时还是未处理过的
def getData(baseURL):dataList=[]                                     #初始化datalist用于存储获取到的数据for i in range(0,10):url=baseURL+str(i*25)html=askURL(url)                                    #保存获取到的源码soup=BeautifulSoup(html,"html.parser")              #对html进行逐一解析,使用html.parser解析器进行解析for item in soup.find_all("div",class_="item"):     #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的divdata=[]                                         #初始化data,用于捕获一次爬取一个div里面的内容item=str(item)                                  #将item数据类型转化为字符串类型# print(item)link=re.findall(findlink,item)[0]               #使用re里的findall方法根据正则提取item里面的电影链接data.append(link)                               #将网页链接追加到data里name=re.findall(findname,item)[0]               #使用re里的findall方法根据正则提取item里面的电影名字data.append(name)                               #将电影名字链接追加到data里# print(link)# print(name)dataList.append(data)                           #将捕获的电影链接和电影名存到datalist里面return dataList                                         #返回一个列表,里面存放的是每个电影的信息print(dataList)def saveData(dataList,savepath):                            #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包sheet=book.add_sheet("test",cell_overwrite_ok=True)     #创建工作表col=["电影详情链接","电影名称"]                           #列名for i in range(0,2):sheet.write(0,i,col[i])                             #将列名逐一写入到excelfor i in range(0,250):data=dataList[i]                                    #依次将datalist里的数据获取for j in range(0,2):sheet.write(i+1,j,data[j])                      #将data里面的数据逐一写入book.save(savepath)                                     #保存excel文件def saveDataDb(dataList,dbpath):initDb(dbpath)                                          #用一个函数初始化数据库conn=sqlite3.connect(dbpath)                            #初始化数据库cur=conn.cursor()                                       #获取游标for data in dataList:for index in range(len(data)):data[index]='"'+data[index]+'" '                #将每条数据都加上""#每条数据之间用,隔开,定义sql语句的格式sql='''insert into test(link,name) values (%s)         '''%','.join (data)cur.execute(sql)                                    #执行sql语句conn.commit()                                       #提交数据库操作conn.close()print("爬取存入数据库成功!")
def initDb(dbpath):conn=sqlite3.connect(dbpath)cur=conn.cursor()sql='''create table test(id integer primary key  autoincrement,link text,name varchar )'''cur.execute(sql)conn.commit()cur.close()conn.close()
if __name__=="__main__":       #程序执行入口main()

python爬虫使用正则爬取网站相关推荐

  1. Python爬虫实战之爬取网站全部图片(一)

    Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12  打开开发人员工具点击e ...

  2. Python爬虫实战之爬取网站全部图片(二)

    通过python 来爬取网站内所有的图片到本地 第三篇是动态获取参数构造图片地址实现下载图片  传送门:https://blog.csdn.net/qq_33958297/article/detail ...

  3. app.vue里使用data_Python爬虫使用正则爬取网站,正则都不会就别玩爬虫了!

    本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关.本文章是自己学习的一些记录.欢迎各位大佬点评! 源码在GitHub上面,且相关介绍更 ...

  4. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  5. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  6. python爬虫最难爬取网站——天猫淘宝,多页爬取遭反爬IP被禁。求大佬赐教。

    python爬虫设置代理ip池--方法(一) 爬取任务是:爬取所在地为新疆的买新疆特产的店铺 代码如下: import requests from lxml.html import etree imp ...

  7. Python爬虫练习:爬取网站动漫图片

    前言 有一段没用 python 了,我也不知道自己为什么对 python 越来越淡,可能自己还是比较喜欢 android ,毕竟自己第一次接触编程就是 android,为了android学java,然 ...

  8. python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...

    原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...

  9. 【Python爬虫】从零开始爬取Sci-Hub上的论文(串行爬取)

    [Python爬虫]从零开始爬取Sci-Hub上的论文(串行爬取) 维护日志 项目简介 步骤与实践 STEP1 获取目标内容的列表 STEP2 利用开发者工具进行网页调研 2.1 提取文章链接和分页链 ...

最新文章

  1. pygame简单的俄罗斯方块游戏和简单的打字游戏
  2. linux 网络设置
  3. tensorflow 之 ValuError: At least two variables have the same name: bottom/bn1/beta_power0 等
  4. caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置
  5. 脑子越来越不好使,文字越来越像驮shi
  6. 怎样永久更改嵌入式linux系统ip,如何修改嵌入式系统IP
  7. python中如何统计元组中元素的个数_Python:count直到列表中的元素是一个元组
  8. 不学无数——适配器模式
  9. JBOSS5+ActiveMQ5.7集成
  10. MySQL学习笔记十七:复制特性
  11. 安全运维 - Windows系统攻击回溯
  12. YouTube如何开启双语显示
  13. 特斯拉又起火燃烧,一人死亡!公司又处于负面新闻中,马斯克到底有多难?
  14. Hexo+Github免费搭建个人博客+美化详细教程
  15. java 俄罗斯方块原理,俄罗斯方块设计原理
  16. 卧槽!微信头像可以带圣诞帽啦!
  17. Minecraft一些红石技巧(1)
  18. C++ 学习(基础语法篇)
  19. 数据处理之标准化/归一化方法
  20. ArcGlobe三维开发之十八——纵断面图的绘制

热门文章

  1. Field restTemplate in com.jack.springcloud.controller.DeptController_Consumer required a bean of typ
  2. 微信公众号开发教程(一)
  3. Matlab相机标定可能遇到的报错
  4. 表白墙网站源码 说出你的心声
  5. ffmpeg中的时间 DTS、PTS、AV_TIME_BASE、AV_TIME_BASE_Q 介绍
  6. ebs 系统 登录 java_Oracle EBS登录页面显示空白
  7. 计算机科学与技术脑电波,科学“读心术”,当脑电波扫描图遇到人工智能
  8. 友推微信分享失败解决办法
  9. ubuntu 18共享文件夹不显示问题解决
  10. 射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计