python 关于用beautifulsoup匹配标题并保存URL的问题

Python032

python 关于用beautifulsoup匹配标题并保存URL的问题,第1张

# encoding: gbk

import urllib2

import re

from BeautifulSoup import BeautifulSoup

patt = re.compile(r'.*href="(.*?)/.*".*?', re.I|re.X) # 按需求更换regex

page=urllib2.urlopen("") # 按需求更换地址

soup=BeautifulSoup(page,fromEncoding="gb2312") # 按需求更换编码

for a in soup.findAll('a'):

a = a.__str__('gb2312')

m = patt.match(a)

if m:

print m.groups(0)[0]

今天简单使用了一下python的re模块和lxml模块,分别利用的它们提供的正则表达式和xpath来解析页面源码从中提取所需的title,xpath在完成这样的小任务上效率非常好,在这里之所以又使用了一下正则表达式是因为xpath在处理一些特殊的页面的时候会出现乱码的情况,当然这不是xpath的原因,而是页面本身编码,跟utf-8转码之间有冲突所致,这里看代码:

python抽取指定url页面的title方法(python获取当前页面的url) python 抽取 url title 脚本之家 第1张

# !/usr/bin/python

#-*-coding:utf-8-*-

'''

功能:抽取指定url的页面内容中的title

'''

import re

import chardet

import urllib

from lxml import etree

def utf8_transfer(strs):

'''

utf8编码转换

'''

try:

if isinstance(strs, unicode):

strs = strs.encode('utf-8')

elif chardet.detect(strs)['encoding'] == 'GB2312':

strs = strs.decode("gb2312", 'ignore').encode('utf-8')

elif chardet.detect(strs)['encoding'] == 'utf-8':

strs = strs.decode('utf-8', 'ignore').encode('utf-8')

except Exception, e:

print 'utf8_transfer error', strs, e

return strs

def get_title_xpath(Html):

'''

用xpath抽取网页Title

'''

Html = utf8_transfer(Html)

Html_encoding = chardet.detect(Html)['encoding']

page = etree.HTML(Html, parser=etree.HTMLParser(encoding=Html_encoding

最近在工作中需要将url的host和path路径分开存储,python内置的 urlparse , 支持我们优雅的解决这个问题, 参考地址

由上文我们可以看到,url被拆分的很细致,提取的方法也很简单,只需要给属性取一个别名,后面跟上解析的key,即可匹配出解析文本。