记录学习python的经历

简介: -记录学习python的经历

        最近在学python,虽然说是开始,但是就是开始在学。因为之前没有体会到python的魅力,所以学了又丢了。现在是第二次学习了。

        因为之前学习的时候心静不下来,导致很多的东西都学不下去。之前学长还布置了一个爬虫作业,心烦气躁的我就学了一个urlib

库,因为BeautifulSoup安装失败,而且觉得re又很难,根本学不会。然后中途就放弃了。现在的话就是重拾基础吧,知道自己比别人浪

费了很多时间,所以也没有所以了,自己默默努力就好。

       爬虫这个东西嘛,很烦,真的很烦,这是对于我这种初学者来说的。爬虫的话,要学requests库,要学bs4,要学re,等等,总而

言之,需要非常多的知识。

 


 

         下面就开始介绍爬虫了。

 

因为我比较喜欢的 requests,beautifulsoup 以及 re

 

requests库

方法:get post put delete head options

返回值主要有 status_code

requests.get(url, params = xxx, headers =xxxxx)

url即为url,params 为get参数,headers 为请求报文

requests.post(url, ,data = , headers =) data为post 传参所需要的传输的数据。

无论是headers params 还是 data ,其数据都应该为字典。字典不区分大小

常用的有requests.content 返回的是二进制,下载文件比如图片专用的。

beautifulsoup

可能比较乱,这是我学习的一个总结了。这是一个py文件,比较懒,都理解下哈。

import bs4
html = """
<body>
<a href="helloworld.com">helloworld.com</a>
<a href="helloworld.com">helloworld.cadom</a></body>"""
# <a href="helloworld.com">helloworld.cadom</a>
# </body
# """
soup = bs4.BeautifulSoup(html,features='html.parser') #传入解析器:lxml
html=soup.prettify()
# print(soup.prettify()) #格式化代码,自动补全
# print(html)
# print(soup.a)#得到title标签里的内容
print(soup.a.name)   #获取名称
print(soup.a.string,type(soup.a.string))  #获取单纯内容
print(type(soup.a))   #获取类型
print(soup.a.attrs)   #获取属性(字典)
print(soup.a['href'])   #获取单个属性   soup.a.get('href')
soup.p['class']="newClass"   修改属性
del soup.p['class']    删除属性
print(soup.body.strings)    <--! soup.body.stripped_strings 更加完美,因为可以去掉多余的字符串-->
for i in soup.body.strings:      #返回一个标签的所有字符串,但是需要遍历。如果一个标签有多个字符串,那么只能用这种方法
    print(i,end='')
print(soup.body.contents[1])    #contents  返回整个字节点,通过控制数值来控制输出
for list_soup in soup.body.children:   #chidren 和content类似,但是children是一个迭代器对象。
    print(list_soup,end='')
for list_childs in soup.body.descendants:    #这个是遍历,返回所有后代的节点
    print(list_childs)
previous_sibling  兄弟节点, parent 父节点   parents所有前辈节点
.next_elements .previous_elements 前后字节
print(soup.find_all("text")) 搜索   #这里还可以传参,不同的参数,还可以利用正则表达式   具体参考https://blog.csdn.net/slhlde/article/details/81937838
find_all( name , attrs , recursive , text , **kwargs )   除了属性,全部都是从标签开始的,不能直接搜索字符串。如果想直接搜索字符串,建议,直接使用re不用beautifulsoup。
使用遍历,就可以一条一条地获取名字,内容,链接     这个是比较厉害的东西,用的比较多,主要用来寻找链接

 

re

1. import re
re.match(pattern,string,flags)   string为匹配的字符串,pattern为需要匹配的一段字符串或者正则表达式,falgs为标志位。返回值为true or False.
注意: match为从开头开始匹配,如果匹配则返回一个成功的匹配,返回值为1,如果开头不匹配则返回0
           如果需要返回字符串,那么需要 re.match.group()   |default=all  ,可以选择 1,2,3,4,5,-----     选择依据为 "()"
2. re.search
re.search(pattern, string, flags=0) 跟上面差不多。
注意:不是从开头开始匹配,匹配成功1,返回一个匹配项,然后就跟match差不多
3.re   pattern   格式为:  r'/           /'
4.compile
re.compole(pattern,flags)     
注意,compile函数之后,所有的函数将不再需要pattern这个参数
5.   re.findall(pattern,string,flags)    返回的是一个列表,当不匹配是,返回的是一个空列表。
6.  re.finditer 与 findall类似,但是这里有一个优势就是findall返回一个迭代器,这个可以有。
7.关于flags  常见的有 re.I   取消大小匹配,其他的自行百度。
8. 特殊字符 ^  开头匹配   $ 结尾匹配    +匹配一个或者多个  *  匹配0个或者多个  ? 零或一个   re+  re*   贪婪匹配
  {m,n}表示前一个字符匹配m到n次     ()  这个表示一个group(),适当地使用group可以有效地高效地工作。
9.  \w  匹配字母数字及下划线   \d  匹配任意的数字  其他的自行百度
10.[ ] 表示在其中选一个作为匹配项,如果[ ]中含有^则表示匹配除了这些字符的所有字符。
[0-9] 匹配任何数字。类似于 [0123456789]
[^0-9] 匹配除了数字外的字符
11.    |    表示多个选择匹配,  a|b|c|d|e|f|g    从前面开始匹配,如果匹配成功则不再匹配,如果失败   
则继续匹配。

 

看了上边的东西,差不多就可以写个爬虫了。

先上代码。代码里面有解释,应该都可以看懂吧。

 

import requests
import re
import bs4
def search(url):
    header={"Host":"www.freebuf.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:76.0) Gecko/20100101 Firefox/76.0",
            "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Language":"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
            "Accept-Encoding":"gzip, deflate, br",
            "DNT":"1",
            "Connection":"keep-alive",
            "Cookie":"wordpress_logged_in_a4d81fc826559e0a94da2a95b91820a7=Netpr1s0ner%7C1591332117%7C6d2091bbc58d7268682e0e0a19846ff4; 3cb185a485c81b23211eb80b75a406fd=1590070802",
            "Upgrade-Insecure-Requests":"1",
            "X-Forwarded-For":"127.0.0.1",
            "Cache-Control":"max-age=0"
            }
    response=requests.get(url,headers=header)
    soup=bs4.BeautifulSoup(response.text,'lxml')        #bs4解析
    return soup.find_all("a",target="_blank")             #这个是爬虫的常用东西,寻找全部的标签,然后限制属性,就可以找到想要的东西
def deal(data):
    list=['0']
    re_pattern=re.compile(r'^<a.+href="(.+html).*".*target')
    for i in data:
        if "https://www.freebuf.com/news" in str(i):            #限制新闻的标题
            # print((i.text),type(i.text))     这个是标签的string(纯中文)
            # print(str(i),type(str(i)))           这个是str类型的标签的全部内容
            if(i.text.strip()=="" or i.text.strip()=="资讯" or i.text.strip()=="关于我们"):     #筛选无用信息
                continue
            list.append(i.text.strip()+"\n\n"+re_pattern.search(str(i)).group(1)+"\n\n")         #添加到列表
    list.pop(0)    #判断需要用到 -1 ,所以开头设置 list[0]='0'
    return list
def main():
    url="https://www.freebuf.com/"
    list = deal(search(url))
    print("\n\n\n")
    print("**--**","今天的重要新闻".center(30),"**--**",end="\n\n\n\n")
    for i in list:
        print("  "+i,end="\n\n")
if __name__ == "__main__":
    main()

         

       

写爬虫首先要做的是分析页面,查看页面的连接规则,然后再使用beautifulsoup或者是re进行匹配。

 

个人认为,beautifsoup与re各有千秋,如果页面的链接比较规则,那么就可以使用beautifulsoup。re是全篇通杀,简单粗暴,有害

有利吧。

 

 

 

 

目录
相关文章
|
17天前
|
数据处理 索引 Python
【Python学习篇】Python实验小练习——文件操作(十一)
【Python学习篇】Python实验小练习——文件操作(十一)
29 1
|
17天前
|
存储 缓存 算法
【Python学习篇】Python实验小练习——循环结构(八)
【Python学习篇】Python实验小练习——循环结构(八)
16 1
|
7天前
|
Python
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
|
15天前
|
机器学习/深度学习 人工智能 数据挖掘
从零开始学习Python编程语言
本文将介绍Python编程语言的基础知识和学习路径,帮助初学者快速入门,并为进阶学习提供指引。首先,我们将讨论Python的特点和应用领域,然后深入探讨Python的基础语法、常用数据类型和控制流程,最后介绍如何利用Python进行简单的编程实践。
|
17天前
|
存储 Python Windows
【Python学习篇】Python实验小练习——函数(十)
【Python学习篇】Python实验小练习——函数(十)
9 1
|
17天前
|
存储 Python
【Python学习篇】Python——函数(九)
【Python学习篇】Python——函数(九)
14 1
|
17天前
|
算法 Python Windows
【Python学习篇】Python实验小练习——选择结构(七)
【Python学习篇】Python实验小练习——选择结构(七)
18 1
|
21小时前
|
Python
Python深入学习教程
Python深入学习教程
|
23小时前
|
JavaScript PHP 网络架构
Python学习技巧及方法总结
Python学习技巧及方法总结