【Python网络爬虫与信息提取】.MOOC. 北京理工大学 bs4+requests+re+scrapy 截屏笔记

零基础建议可以先看python语法,然后看看《Python3 网络爬虫开发实战》

此为b站上北理爬虫的截屏笔记,每课的代码都在里面了,配合视频回顾

p17

 

 

p18

 

p19

可用devtool

 

p23

查看父亲节点

查看标签

 

 

 

 

 

p24 bs遍历

 

 

soup.body下面有5个节点

 

 

 

 

注意,不是同一个父节点不能平行遍历,只有body下的p标签可以

 

 

p25

prettify,使内容显示更加清晰

 

 

p27 信息标记方式

xml

有内容:<...>....<.../>

无内容:<..../>

注释:

yaml

 

 

 

 

p28

 

p29 提取url

 

 

True显示所有标签

用正则打印所有b开头的标签

 

 

查找link1的标签,查找link会返回空,只能用正则报答是

 

recursive默认True,false则只查到孩子节点,子孙不查找

 

查找内容

重要简写

 

 

p32 实例 大学排名

 

 

 

print函数

原来的,打印出来不能对齐

 

 

 

完整代码

def getHTMLText(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return None

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string,tds[1].string,tds[2].string])
            
def printUnivList(ulist,num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名","学校","总分",chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))
        # print("Suc" + str(num))
    
def main():
    uinfo = []
    url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo,20) # 20 unives
    
if __name__ == '__main__':
    main()

 

p37 正则表达

 

 

p38

re常用操作 重要

 

 

 

 

p39

 

group(0)是返回所有

以下为例子

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

 

match匹配的是开头

findall

 

split

 

 

finditer

 

sub 替换字符串

例子

 

编译后可以加快速度

 

p40

match对象

 

 

 

 

p41

贪婪和最小匹配

 

 

 

p43 爬取淘宝实战

 

 

 

 

 

p46 股票爬取

股票信息的这个

<\div>父标签只有一个,可以搜索这个,更快

1. find_all,返回列表

2. 比如说,返回[sh201000],那么find_all()[0]就是拿出sh201000

3. 在append到lst里,这样lst就不会是[[sh201000], [sh201002]]这样

 

 

if的理解:可能东方网上有的股票,在百度网上没有

 

 

quote.eastmoney.com/stocklist.html

gupiao.baidu.com/stock/

优化:

增加进度条

 

p52 scrapy

p56 scrapy 实例

 

 

 

 

 

p57 yield生成器

 

 

p58 基本使用

 

 

 

 

 

p60 股票数据scrapy实例

此处网址以变更,应采用http://quote.eastmoney.com/stock_list.html#sh(上海)

 

 

 

 

在class下面

 

打开pipelines.py

打开配置,取消注释

 

p62优化

——The End——

现在2019年6月,里面的代码大部分都不可用了,有机会会再补充能用的例子

你可能感兴趣的:(Python,学习笔记)