python的【爬虫】:使用urllib爬取wiki文章,使用beautifulSoup解析html
2016-03-18 14:52
1226 查看
之所以写这个,是因为搜不到关于wiki爬取方面的教程。
先学习:
正则表达式,http://python.jobbole.com/81346/
BeautifulSoup(html文档解析器),http://python.jobbole.com/81349/
爬取糗事百科实例,http://python.jobbole.com/81351/
现在开始爬取wiki数据:
分析页面,F12,找到要的内容,如下:
但有一点,注意:
解决这个干扰的方法是:
ps=div.find_all(name='p', limit=3, recursive=False) #only direct childrenrecursive=False!
最后,BeautifulSoup一般能够解决分析网页的大部分问题,如果不是没办法,不要使用正则表达式。。。。
爬虫代码部分:
url="https://en.wikipedia.org/wiki/"+words[i]
request=urllib2.Request(url, headers=headers)
response=urllib2.urlopen(request)
wikiHtml=response.read().decode('utf-8')
网页内容提取部分(找到div、找到想要的p、提取p的文本内容):
div=html.find(name='div', id='mw-content-text')
ps=div.find_all(name='p', limit=3, recursive=False) #only direct children
for p in ps:
pText=p.get_text()
完整代码供大家参考。。。。
#!usr/bin/env
# -*-coding:utf-8 -*-
import pandas as pd
import numpy as np
import urllib, urllib2
import re
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding("utf8")
#for UnicodeEncodeError
def SaveFile(content, filename):
f=open("wikiData/"+filename,"a")
f.write(str(content)+"\n")
f.close()
def SpideWiki(words):
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
try:
for i in range(len(words)):
url="https://en.wikipedia.org/wiki/"+words[i]
request=urllib2.Request(url, headers=headers)
response=urllib2.urlopen(request)
wikiHtml=response.read().decode('utf-8')
html=BeautifulSoup(str(wikiHtml),"lxml")
div=html.find(name='div', id='mw-content-text')
ps=div.find_all(name='p', limit=3, recursive=False) #only direct children
for p in ps:
pText=p.get_text()
SaveFile(pText, words[i])
print words[i], "process over...", "=="*20
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
先学习:
正则表达式,http://python.jobbole.com/81346/
BeautifulSoup(html文档解析器),http://python.jobbole.com/81349/
爬取糗事百科实例,http://python.jobbole.com/81351/
现在开始爬取wiki数据:
分析页面,F12,找到要的内容,如下:
但有一点,注意:
解决这个干扰的方法是:
ps=div.find_all(name='p', limit=3, recursive=False) #only direct childrenrecursive=False!
最后,BeautifulSoup一般能够解决分析网页的大部分问题,如果不是没办法,不要使用正则表达式。。。。
爬虫代码部分:
url="https://en.wikipedia.org/wiki/"+words[i]
request=urllib2.Request(url, headers=headers)
response=urllib2.urlopen(request)
wikiHtml=response.read().decode('utf-8')
网页内容提取部分(找到div、找到想要的p、提取p的文本内容):
div=html.find(name='div', id='mw-content-text')
ps=div.find_all(name='p', limit=3, recursive=False) #only direct children
for p in ps:
pText=p.get_text()
完整代码供大家参考。。。。
#!usr/bin/env
# -*-coding:utf-8 -*-
import pandas as pd
import numpy as np
import urllib, urllib2
import re
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding("utf8")
#for UnicodeEncodeError
def SaveFile(content, filename):
f=open("wikiData/"+filename,"a")
f.write(str(content)+"\n")
f.close()
def SpideWiki(words):
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
try:
for i in range(len(words)):
url="https://en.wikipedia.org/wiki/"+words[i]
request=urllib2.Request(url, headers=headers)
response=urllib2.urlopen(request)
wikiHtml=response.read().decode('utf-8')
html=BeautifulSoup(str(wikiHtml),"lxml")
div=html.find(name='div', id='mw-content-text')
ps=div.find_all(name='p', limit=3, recursive=False) #only direct children
for p in ps:
pText=p.get_text()
SaveFile(pText, words[i])
print words[i], "process over...", "=="*20
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法