python网页抓取-urllib、Beautiful Soup-并生成表格
python网页抓取,通过程序下载网页并从中提取信息的过程。
- urllib。使用urllib来获取网页的HTML代码,再使用正则表达式或其他技术从中提取信息。
代码运行时,出现了 ‘utf-8’ codec can’t decode byte 0x8b in position 1: invalid start byte 这个错误提示。原因是网站返回的数据是经过压缩的,压缩格式是Gzip格式,需要通过相应算法解压后使用。
Python的gzip模块主要用于压缩和解压缩数据。
gzip.compress()函数可以压缩数据。
gzip.decompress()函数可以解压缩数据。gzip.compress()示例:
gzip.decompress()示例:最终正确的抓取到数据的代码是:注意各个type的判断和转换。 - Beautiful Soup。专为网页抓取而设计的Beautiful Soup库。接下来将生成的文件通过这个网页(JSON转Excel-在线JSON转换为XLS可自定义输入或上传JSON-即时工具)的工具,转换成表格形式导出。
- 补充。
- 正则。
-
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
-
re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None.
-
re.search 匹配整个字符串,直到找到一个匹配。
-
re.findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
注意:match和search是匹配一次,findall匹配所有。
eg:
单个匹配模式:pattern = re.compile(r'\d+') # 查找数字
result2 = pattern.findall('runoob 123 google 456') #结果:['123', '456']多个匹配模式:result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10') #结果:[('width', '20'), ('height', '10')]
-
re.finditer 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。(迭代是,是访问集合元素的一种方式。是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。两个基本的方法:iter() 和 next()。)
-
re.split 按照能够匹配的子串将字符串分割后返回列表。正则表达式模式\W表示匹配非数字字母下划线。\W+常用于匹配那些不需要的字符,例如在处理文本数据时去除空格、标点符号等。eg:
p = re.split('\W+', 'rb,rub,runb.')
#\W+找到了,,.三个符合的匹配,三个标点三刀切成了四块,最后一个是''
print(p) #['rb', 'rub', 'runb', '']
-
re.sub 替换字符串中的匹配项。eg:
text = "Hello,world! This is a test."
clean_text = re.sub(r'\W+', ' ', text) #将所有匹配\W+的部分替换为空格字符串,去除所有非字母数字字符。
print(clean_text) # 输出: Hello world This is a test
-
- 正则。