当前位置: 首页 > news >正文

微信小程序企业网站织梦网站模板怎么安装

微信小程序企业网站,织梦网站模板怎么安装,淘客的手机网站怎么做,邯郸免费网络爬取时间#xff1a;2019-09-27爬取难度#xff1a;★★☆☆☆☆请求链接#xff1a;https://movie.douban.com/top250 以及每部电影详情页爬取目标#xff1a;爬取榜单上每一部电影详情页的数据#xff0c;保存为 CSV 文件#xff1b;下载所有电影海报到本地涉及知识2019-09-27爬取难度★★☆☆☆☆请求链接https://movie.douban.com/top250 以及每部电影详情页爬取目标爬取榜单上每一部电影详情页的数据保存为 CSV 文件下载所有电影海报到本地涉及知识请求库 requests、解析库 lxml、Xpath 语法、正则表达式、CSV 和二进制数据储存、列表操作完整代码https://github.com/TRHX/Python3-Spider-Practice/tree/master/BasicTraining/douban-top250其他爬虫实战代码合集持续更新https://github.com/TRHX/Python3-Spider-Practice爬虫实战专栏持续更新https://itrhx.blog.csdn.net/article/category/9351278 文章目录【1x00】循环爬取网页模块【2x00】解析模块【2x01】Xpath 解析排名、电影名、评分信息【2x02】Xpath 解析参评人数【2x03】正则表达式解析制片国家、语言【3x00】返回解析数据【4x00】数据储存模块【5x00】完整代码【6x00】数据截图【7x00】程序不足的地方【1x00】循环爬取网页模块 观察豆瓣电影 Top 250请求地址为https://movie.douban.com/top250 每页展示25条电影信息照例翻页观察 url 的变化 第一页https://movie.douban.com/top250 第二页https://movie.douban.com/top250?start25filter 第三页https://movie.douban.com/top250?start50filter 一共有10页每次改变的是 start 的值利用一个 for 循环从 0 到 250 每隔 25 取一个值拼接到 url实现循环爬取每一页由于我们的目标是进入每一部电影的详情页然后爬取详情页的内容所以我们可以使用 Xpath 提取每一页每部电影详情页的 URL将其赋值给 m_urls并返回 m_urlsm_urls 是一个列表列表元素就是电影详情页的 URL def index_pages(number):url https://movie.douban.com/top250?start%sfilter % numberindex_response requests.get(urlurl, headersheaders)tree etree.HTML(index_response.text)m_urls tree.xpath(//li/div/div/a/href)return m_urlsif __name__ __main__:for i in range(0, 250, 25):movie_urls index_pages(i)【2x00】解析模块 定义一个解析函数 parse_pages()利用 for 循环依次提取 index_pages() 函数返回的列表中的元素也就是每部电影详情页的 URL将其传给解析函数进行解析 def index_pages(number):expressionsdef parse_pages(url):expressionsif __name__ __main__:for i in range(0, 250, 25):movie_urls index_pages(i)for movie_url in movie_urls:results parse_pages(movie_url)详细看一下解析函数 parse_pages()首先要对接收到的详情页 URL 发送请求获取响应内容然后再使用 Xpath 提取相关信息 def parse_pages(url):movie_pages requests.get(urlurl, headersheaders)parse_movie etree.HTML(movie_pages.text)【2x01】Xpath 解析排名、电影名、评分信息 其中排名、电影名和评分信息是最容易匹配到的直接使用 Xpath 语法就可以轻松解决 # 排名 ranking parse_movie.xpath(//span[classtop250-no]/text())# 电影名 name parse_movie.xpath(//h1/span[1]/text())# 评分 score parse_movie.xpath(//div[classrating_self clearfix]/strong/text())【2x02】Xpath 解析参评人数 接下来准备爬取有多少人参与了评价分析一下页面 如果只爬取这个 span 标签下的数字的话没有任何提示信息别人看了不知道是啥东西所以把 人评价 这三个字也爬下来的话就比较好了但是可以看到数字和文字不在同一个元素标签下而且文字部分还有空格要爬取的话就要把 classrating_people 的 a 标签下所有的 text 提取出来然后再去掉空格 # 参评人数 # 匹配a节点 value parse_movie.xpath(//a[classrating_people]) # 提取a节点下所有文本 string [value[0].xpath(string(.))] # 去除多余空格 number [a.strip() for a in string]# 此时 number [1617307人评价]这样做太麻烦了我们可以直接提取数字得到一个列表然后使用另一个带有提示信息的列表将两个列表的元素合并组成一个新列表这个新列表的元素就是提示信息人数 # 参评人数 value parse_movie.xpath(//span[propertyv:votes]/text()) # 合并元素 number [ .join([参评人数] value)]# 此时 number [参评人数1617307]【2x03】正则表达式解析制片国家、语言 接下来尝试爬取制片国家/地区、语言等信息 分析页面可以观察到制片国家/地区和语言结构比较特殊没有特别的 class 或者 id 属性所包含的层次关系也太复杂所以这里为了简便直接采用正则表达式来匹配信息就没有那么复杂了 # 制片国家/地区 value re.findall(span classpl制片国家/地区:/span(.*?)br/, movie_pages.text) country [ .join([制片国家:] value)]# 语言 value re.findall(span classpl语言:/span(.*?)br/, movie_pages.text) language [ .join([语言:] value)]【3x00】返回解析数据 其他剩下的信息皆可利用以上方法进行提取所有信息提取完毕最后使用 zip() 函数将所有提取的对象作为参数将对象中对应的元素打包成一个个元组然后返回由这些元组组成的列表 return zip(ranking, name, score, number, types, country, language, date, time, other_name, director, screenwriter, performer, m_url, imdb_url)【4x00】数据储存模块 定义一个数据保存函数 save_results() def save_results(data):with open(douban.csv, a, encodingutf-8-sig) as fp:writer csv.writer(fp)writer.writerow(data)注意编码方式要设置为 utf-8-sig如果设置为 utf-8则文件会乱码不设置编码则可能会报一下类似错误 UnicodeEncodeError: gbk codec cant encode character \ub3c4 in position 9: illegal multibyte sequence可以看到错误出现在 \ub3c4 上将该 Unicode 编码转换为中文为 도发现正是排名第 19 的电影熔炉 도가니因为标题有韩文所以在储存为 CSV 文件时会报编码错误而将编码设置为 utf-8-sig 就不会报错具体原因参见《Python 中文日文汉字乱码处理utf-8-sig》 接下来是保存电影的海报到本地 # 保存电影海报 poster parse_movie.xpath(//div[idmainpic]/a/img/src) response requests.get(poster[0]) name2 re.sub(r[A-Za-z\:\s], , name[0]) poster_name str(ranking[0]) - name2 .jpg dir_name douban_poster if not os.path.exists(dir_name):os.mkdir(dir_name) poster_path dir_name / poster_name with open(poster_path, wb)as f:f.write(response.content)解析电影详情页使用 Xpath 提取海报的 URL向该 URL 发送请求 图片以 排名电影名.jpg 的方式命名但是由于提取的电影名部分含有特殊字符比如排名第 10 的电影忠犬八公的故事 Hachi: A Dog’s Tale其中有个冒号而 Windows 文件命名是不能包含这些字符的所以我们直接去除电影名包含的英文字符、空白字符、特殊字符只留下中文代码实现 name2 re.sub(r[A-Za-z\:\s], , name[0]) 定义一个文件夹名称 douban_poster利用 os 模块判断当前是否存在该文件夹若不存在就创建一个 最后以二进制形式保存海报到当前目录的 douban_poster 文件夹下 【5x00】完整代码 # # --*-- coding: utf-8 --*-- # Time : 2019-09-27 # Author : TRHX # Blog : www.itrhx.com # CSDN : https://blog.csdn.net/qq_36759224 # FileName: douban.py # Software: PyCharm # import requests from lxml import etree import csv import re import time import osheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36}def index_pages(number):url https://movie.douban.com/top250?start%sfilter % numberindex_response requests.get(urlurl, headersheaders)tree etree.HTML(index_response.text)m_urls tree.xpath(//li/div/div/a/href)return m_urlsdef parse_pages(url):movie_pages requests.get(urlurl, headersheaders)parse_movie etree.HTML(movie_pages.text)# 排名ranking parse_movie.xpath(//span[classtop250-no]/text())# 电影名name parse_movie.xpath(//h1/span[1]/text())# 评分score parse_movie.xpath(//div[classrating_self clearfix]/strong/text())# 参评人数value parse_movie.xpath(//span[propertyv:votes]/text())number [ .join([参评人数] value)]# value parse_movie.xpath(//a[classrating_people])# string [value[0].xpath(string(.))]# number [a.strip() for a in string]# print(number)# 类型value parse_movie.xpath(//span[propertyv:genre]/text())types [ .join([类型] value)]# 制片国家/地区value re.findall(span classpl制片国家/地区:/span(.*?)br/, movie_pages.text)country [ .join([制片国家:] value)]# 语言value re.findall(span classpl语言:/span(.*?)br/, movie_pages.text)language [ .join([语言:] value)]# 上映时期value parse_movie.xpath(//span[propertyv:initialReleaseDate]/text())date [ .join([上映日期] value)]# 片长value parse_movie.xpath(//span[propertyv:runtime]/text())time [ .join([片长] value)]# 又名value re.findall(span classpl又名:/span(.*?)br/, movie_pages.text)other_name [ .join([又名:] value)]# 导演value parse_movie.xpath(//div[idinfo]/span[1]/span[classattrs]/a/text())director [ .join([导演:] value)]# 编剧value parse_movie.xpath(//div[idinfo]/span[2]/span[classattrs]/a/text())screenwriter [ .join([编剧:] value)]# 主演value parse_movie.xpath(//div[idinfo]/span[3])performer [value[0].xpath(string(.))]# URLm_url [豆瓣链接 movie_url]# IMDb链接value parse_movie.xpath(//div[idinfo]/a/href)imdb_url [ .join([IMDb链接] value)]# 保存电影海报poster parse_movie.xpath(//div[idmainpic]/a/img/src)response requests.get(poster[0])name2 re.sub(r[A-Za-z\:\s], , name[0])poster_name str(ranking[0]) - name2 .jpgdir_name douban_posterif not os.path.exists(dir_name):os.mkdir(dir_name)poster_path dir_name / poster_namewith open(poster_path, wb)as f:f.write(response.content)return zip(ranking, name, score, number, types, country, language, date, time, other_name, director, screenwriter, performer, m_url, imdb_url)def save_results(data):with open(douban.csv, a, encodingutf-8-sig) as fp:writer csv.writer(fp)writer.writerow(data)if __name__ __main__:num 0for i in range(0, 250, 25):movie_urls index_pages(i)for movie_url in movie_urls:results parse_pages(movie_url)for result in results:num 1save_results(result)print(第 str(num) 条电影信息保存完毕)time.sleep(3) 【6x00】数据截图 【7x00】程序不足的地方 程序不足的地方豆瓣电影有反爬机制当程序爬取到大约 150 条数据的时候IP 就会被封掉第二天 IP 才会解封可以考虑综合使用多个代理、多个 User-Agent、随机时间暂停等方法进行爬取
http://www.zqtcl.cn/news/292980/

相关文章:

  • 绍兴网站设计公司网站空间位置是什么
  • 高端网站设计品牌珠海网站建设最新报价
  • 做网站的商家怎么赚取流量费房地产怎么做网站推广
  • 企业网站建设基本流程网站积分方案
  • 网站定位与功能分析网站常见故障
  • 深圳电子商务网站制作桂林市防疫最新政策
  • 北京网站建设备案代理网站建设计划建议
  • 湛江公司做网站wordpress如何设置网站地图
  • wordpress攻防优化方案
  • 义乌市建设银行分行网站宜春静态管理
  • 企业网站优化电话17做网店类似网站
  • 南京网站建设黄页网站大全在线看免费
  • 网站开发过程记录定制西服
  • 长沙有哪些网站建设公司用vue做网站的实例
  • 购物网站模板 php网页设计图片剧中
  • 嘉峪关市建设局网站横沥镇网站建设公司
  • 查找网站软件培训记录
  • 注册网站安全吗制作人漫画
  • jeecms 怎么建设网站嵌入式软件开发兼职
  • 百度怎么自己做网站四川省建设工程交易中心网站
  • 中介如何做网站收客wordpress 运行代码
  • 网页设计与网站建设考试题目如何做建议的网站
  • 网站怎么推广软文政务网站建设存在问题
  • 公司官方网站建设需要多少钱wordpress单页面制作
  • 社群网站建设网站推广的方式有哪几种
  • 培训机构活动策划网站wordpress 改端口
  • 北京网站制作与营销培训用asp做网站视频
  • 江苏丹阳建设公司网站做网站中的剪辑图片
  • 纯静态网站怎样广州工程造价信息网
  • 为什么网页不能打开建设银行网站企业网站开发综合实训