python爬虫初步学习

url:  表示远程数据的路径,一般是指网址。

Beautiful Soup:是python的一个库,最主要的功能是从网页抓取数据。使用Beautiful Soup时,由于被移植到BS4了,那么导入时我们需要 from bs4 import BeautifulSoup。Beautiful Soup自动将输入文档转换为Unicode编码(Unicode 是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求),输出文档转换为utf-8编码(一种针对Unicode的可变长度字符编码 !!《意外发现一个惊喜》:在python的开始时,#coding:utf-8或者#coding=utf-8的作用一样,声明Python代码的文本格式是UTF-8,按照这种格式来读取程序。由于Python中默认的编码格式是 ASCII 格式,那么在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了 ,所以代码中包含中文,就需要在头部指定编码。似乎有些版本不用写)。

 

在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本“伪装成浏览器的正常访问”,来避免这一问题。
怎样设置请求头:打开浏览器的任意界面,右击鼠标,找到“审查元素”(就是与找网页的代码一样的步骤)

,随后出现的代码栏上点击"Network",

找到“name”下面的任意一行点击,就会在其右边出现headers,

随后就会找到其所属的User-Agent,复制即可。

爬虫所需要的信息位于html中,需要查看html代码,明确要抓取的内容的所在位置,明确换页规律,明确爬虫的起始位置(获取尾页信息的html位置>>>为什么要确定尾页呢?因为构造代码时,我们要知道代码的起止位置,使用for循环良好的控制代码的开始与完结),然后构造代码。(html代码其实就是用许多个"<Y yy='aaa'>xxxx</Y>"是的结构将想要输出在页面上的内容包含起来的一种语言。 ”Y”称之为标签名,”yy”为其属性名,”aaa”是其属性值,”xxxx”是这个标签的内容,也就是对应于页面上的信息。一般情况下我们要获取的就是”xxxx”,有时我们可能也需要获取标签的属性值”aaa”。)。 
      说到这里,就要补上之前Beautiful Soup的具体知识:之前说到的“解析html代码,从网页抓取数据”就是通过html代码中的标签定位我需要的信息。然后百度到了两个(听说是)比较关键的方法:
            1、find方法和findAll方法:
                find和findAll,二者的功能是相同的,通过find( )的参数,即find( )括号中指定的标签名,属性名,属性值去搜索对应的标签,并获取它,不过find只获取搜索到的第一个标签,而findAll将会获取搜索到的所有符合条件的标签,放入一个迭代器(实际上是将所有符合条件的标签放入一个list(存入一个列表),想要获取每个标签的内容,只需对这个列表使用一个for循环遍历一遍即可。               语法:findAll(tag, attributes, recursive, text, limit, keywords)                         find(tag, attributes, recursive, text, keywords)
                        一般只用到前两个tag(标签参数),attributes(属性参数)
            2、get_text()方法:
                使用find获取的内容不仅仅是我们需要的内容,而且包括标签名、属性名、属性值等,比如使用find方法获取"<Y yy='aaa'>xxxx</Y>" 的内容xxxx,使用find后,我们会得到整个"<Y yy='aaa'>xxxx</Y>",十分冗长,实际我们想要的仅仅是这个标签的内容xxxx,因此,对使用find方法后的对象再使用get_text( )方法,就可以得到标签的内容了,对应到这里,我们通过get_text( )方法就可以得到xxxx了。

(我仿照实验了一下别人的成果,爬了一个别人认为最简单的虫(5分钟,6行代码教我写爬虫)!!
豆瓣电影的一周口碑榜:
        根据提示打开豆瓣网,通过点击右键中的“审查元素” ,出来新的界面

 

随后点击新界面左上角的一个符号:方框里有一个箭头,如下:

鼠标点击要爬取的数据: 原界面一周口碑榜下的任意一个电影,下方的新界面就会出现颜色深的地方,我们就可以从中找出可以写入python爬虫代码的部分:
<td class="title">
           <a href="https://movie.douban.com/subject/30170448/">迦百农</a>
</td>
那么从上面这两行,我们需要提取:
1、//td:这个相当于指定的大目录;
2、[@class=''title"]:这个相当于指定的小目录;
3、//a:这个相当于最小的目录;
那么有:

import requests
from lxml import html
url='https://movie.douban.com/' #需要爬数据的网址
page=requests.get(url)
tree=html.fromstring(page.text)
result=tree.xpath('//td[@class="title"]//a/text()'#获取需要的数据
print(result)

运行结果:
['迦百农', '极限职业', '检察方的罪人', '涂样人生', '悠哉日常大王剧场版:假期活动', '夜以继日', '恐怖分子的孩子', '忌日快乐2', '惊奇队长', '欢乐满人间2'] 

上述代码:
lxml是一个优美的扩展库,用来快速解析html代码。
以下面的导入开始:
from lxml import html
import requests
下一步是使用 requests.get 来从web页面中取得我们的数据, 通过使用 html 模块解析它,并将结果保存到 tree 中。
url='https://movie.douban.com/' #需要爬数据的网址
page = requests.get('url')
tree = html.fromstring(page.text)

其中又有  html.fromstring()我百度到的感觉不是我想要的,不清楚它是干什么的。
result=tree.xpath('//td[@class="title"]//a/text()') #获取需要的数据print(result)
其中tree.xpath('//td[@class="title"]//a/text()')是我们之前提取的信息组合,唯一多的/text()作用是提取其中的数据。

如果爬取最近热门电视剧,只需把上述代码中获取数据的那一排改动一下,这时就需要在之前的豆瓣电影网(与上述操作一样)找到html代码,点击最近热门电视剧,并在代码中提取关键字写入python代码中
<div class="cover-wp" data-isnew="false" data-id="27088993">
                <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2549148229.jpg" alt="都挺好" data-x="1378" data-y="1929">
</div>

当我这样实施后,我发现我遇到了问题,没有提取到第一个代码的那些关键字目录,运行python爬虫代码失败。我尝试去提取  正在热映   的数据,却发现能找到并能爬取到信息来。
<li class="title">
              <a href="https://movie.douban.com/subject/27624661/?from=showing" class="">比悲伤更悲伤...</a>
</li> 

 不知道是为什么,又去爬取其他数据时,也找不到。下面是正在热映爬取出来的运行结果:
['惊奇队长', '江海渔童之巨...', '比悲伤更悲伤...', '绿皮书', '我的英雄学院...', '阳台上', '驯龙高手3', '过春天', '把哥哥退货可...', '流浪地球', '阿丽塔:战斗...', '夏目友人帐', '老公去哪了', '少女宿舍', '地久天长', '老师·好', '熊出没·原始...', '飞驰人生', '波西米亚狂想...', '新喜剧之王', '梦想之城', '古井凶灵', '今世未了缘', '318号公路...', '未来的你']

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值