爬虫--爬取网页图片--bs4

1.  爬虫网络请求方式:  urllib(模块),requests(库),  scrapy , pyspider  (框架)

2. 爬虫数据提取方式:  正则表达是,  bs4, lxml, xpath,  css


# 参数1:序列化的html源代码字符串,将其序列化成一个文档树对象。
# 参数2:将采用 lxml 这个解析库来序列化 html 源代码
html = BeautifulSoup(open('index.html', encoding='utf-8'), 'lxml')

print(html.title)# 获取html中的title标签及内容
print(html.a)#  获取html中的a标签及内容
 
结果为:     <title>百度一下,你就知道</title>

                <a href="http://www.baidu.com">百度一下</a>

3.  获取某一个标签的所有的属性


# print(html.a.attrs) #  a 标签中所有的属性

4.  获取其中的一个属性


# print(html.a.get('id'))   # 获得a标签中id这个属性

5.  获取多个标签,需要便利文档树


# print(html.head.contents)

6. 一定要掌握的内容

find_all     根据标签名查找一组元素

find     

get_text   标签内所有文本,包括子标签

select   支持所有的CSS选择器语法,  返回类型是 list(网上搜索)

string   

7. 


import os

os.mkdir('abc') # 在当前目录6-7下,创建abc
os.chdir('abc') # 进入到abc
os.mkdir('123') # abc创建123目录

os.chdir(os.path.pardir) # 回到父级目录

os.mkdir('erf')
 
结果为:                     


8.  os:  用来操作本地文件或文件夹的模块

     json:  用来解析json数据的模块

9.  status_code: requests库中的属性,获取状态码.

response = requests.get(url, headers=self.headers)
# status_code: requests库中的属性,获取状态码。
if response.status_code == 200:
    return response.text
else:
    return None

10.  yield 的用法



# yield: 好处:1.不会将所有数据取出来存入内存中;
而是返回了一个对象;可以通过对象获取数据;用多少取多少,可以节省内容空间。
              2.除了能返回一个值,还不会终止循环的运行;



11.  os.getcwd()的用法:


# os.getcwd()获取当前文件所在目录
# md5(url).hexdisgest(): 获取url图片地址加密后的字符串
with open('{}/{}.jpg'.format(os.getcwd(), md5(url.encode('utf-8')).hexdigest()), 'wb') as f:f.write(content)


12.map()的用法

pool = Pool()
# map()映射方法
# pool.map(函数,[])

pool.map(get_all_data, [0, 20, 40, 60, 80, 100])

13. 线程:


# 线程:一个默认的主线程。而一个进程包含至少一个线程(主线程),除了主线程还有分线程。
# Python线程缺陷:内置了一个全局的线程锁(GIL),基于单核处理器。
  CPython(C语言实现的解释器) JPython NetPython
# 对于I/O密集型操作:可以使用多线程。爬虫属于IO密集型的。

14. 快速生成列表的方式:  列表生成式.


# 快速生成列表的方式:列表生成式。
# mylist = [x + 10 for x in range(1, 11)]
# print(mylist)


15. 列表生成器


#  列表生成器
# mylist = (x + 10 for x in range(1, 11))
# print(mylist)
# print([x for x in mylist])

16. 


# def sum(x):
#     return x+10
#
# # 凡是能够使用for循环遍历的对象都是可迭代对象。list tuple set generator object
# # 迭代器 生成器generator object
# res = map(sum, [1,2,3,4,5])
# print([x for x in res])

17.generator object :  返回一个生成器对象


# generator object: 返回一个生成器对象。__next__()

# print(result.__next__())
# print(result.__next__())
# print(result.__next__())


18. help 的用法



# help()是查看一个类的所有的API
# print(help(result))









猜你喜欢

转载自blog.csdn.net/weixin_42312791/article/details/80614189