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标签及内容结果为:
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))