您的位置:首页 > 编程语言 > Python开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息