为什么这段代码中的getwnextlink.dllExternalLink函数可以正常运行

馆藏&21866
TA的最新馆藏[转]&WordPress中函数get_term_link的参数设置问题
为何要用 get_term_link?: 新类型的分类是无法用 &?php echo get_category_link( $category_id ); ?& 输出分类链接地址的,需要用 get_term_link() 函数,此函数用法如下: &?php get_term_link( $term, $taxonomy ); ?& 具体参考 WordPress Codex:http://codex.wordpress.org/Function_Reference/get_term_link 问题: 举个例: - 自定义分类ID的变量为 $term,$term 是根据后台设置而改变的,为了方便说明,这里假定后台参数为 $custom_term = 8 - 我要获取自定义分类ID为 $term 的分类链接地址,那么按照官方说明应该是: &?php $term = $custom_ echo get_term_link( $term, 'product_cat'); ?& 看似没错,但问题来了,这样会返回错误: Catchable fatal error: Object of class WP_Error could not be converted to string in.。没错啊,直接用 echo $ 输出结果的确是 8,这就让人郁闷了&& 不过如果你直接这样: &?php echo get_term_link( 8, 'product_cat'); ?& 又能正常工作。 解决方法: 在 WordPress Codex 打转时,无意中看到国外朋友也碰到这个问题,然后他自己解决了,顿悟&&传送门 》 原来是变量类型问题,这 get_term_link 函数和其它常用的 WordPress 函数不同,不会自己转换变量类型,你得先把字符类转换为整数才能正常工作,好Orz的函数! 下面这样就能正常工作: (坐在沙发上的Bolo注:intval($term, 10)会更好,不然$term值太大的时候会有进制转换问题,要么就用(int)$term) &?php $term = $custom_ echo get_term_link( intval($term), 'product_cat'); ?& 所以,以后遇到类似这郁闷的函数,就要考虑是不是变量数据类型问题了。 折腾玩(完)。爬虫抓取 第三章
Chapter3.开始抓取
到目前为止,本书的之前的例子讲的是单个静态页面,用了一些人为的页面。在本章中,我们将开始寻找一些现实世界中的问题,用爬虫跨越多个页面,甚至多个多个站点。网络爬虫之所以被叫做网络爬虫是因为他们可以在整个网络上抓取,它的核心元素是递归。他们必须检索URL的整个页面,检查该页面的其他URL,并继续检索,循环往复。但是要注意,你可以抓取页面但是并不意味着你要那么做。之前例子中的网络爬虫工作很好是因为所有的数据都在一个页面上。随着正式使用网络爬虫,你必须非常认真的考虑你正在使用的带宽,并尽一切去确认是否有办法使得目标服务器的负载更容易。
遍历单个域名:
即使你没有听说过“六度维基百科”,那么你肯定听说过同名的“凯文贝肯效应”(任何两个人之间中间仅仅需要经过6个人就可以产生联系)。在这两个事情中,我们的目标是连接两个不大可能的题目(在第一中情况下,维基百科的文章连接到彼此,第二种情况为演员出现在不同的电影中)通过完全不超过6个连接(包括两个原始的题目)。例如,Eric Idle(埃里克 爱都)和Brendan Fraser(布兰登 弗舍)出现在铁骑惊魂中,布兰登 弗舍和Kevin Bacon(凯文 贝肯)出现在我呼吸的空气中。在这种情况中,埃里克和凯文之间是第三级别的连接。这本节中,我们将从“六度维基百科”的解决发现者开始。意思就是,我们将会从埃里克的页面通过一些连接点去访问凯文的页面。
什么是维基百科的服务器负载:
根据维基百科基金会(维基百科背后的上级组织),该网站的资源每秒钟接受2500次访问,超过99%的是访问维基百科的域名(见“维基图”的“访问量”部分)。因为浏览量的绝对数量,你的网络爬虫不会对维基百科的服务器负载产生任何明显的影响。然而,如果你运行本书中的代码或者你创建的网络爬虫去爬取维基百科,我建议你做一个税收的捐献,哪怕是几美元也能抵消你产生的网络负载并且提供更好的教育资源去帮助其他人。
你应该知道如何去写一个检索维基百科任意界面的Python脚本,并且生成网页上链接的列表:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(&http://en.wikipedia.org/wiki/Kevin_Bacon&)
bsObj = BeautifulSoup(html)
for link in bsObj.findAll(&a&):
if 'href' in link.attrs:
print(link.attrs['href'])
如果你你看一下链接产生的名单,你会发现,你所期望的文章是:“阿波罗13号”,“费城”,“艾美奖”等等。然而,还有一些我们不希望有的东西:
//wikimediafoundation.org/wiki/Privacy_policy
//en.wikipedia.org/wiki/Wikipedia:Contact_us
事实上,维基百科的每个页面的侧边栏,页脚,和标题链接的地方都链接着类别页面,讨论页面,和包含其他不同文章的页面:
/wiki/Category:Articles_with_unsourced_statements_from_April_2014
/wiki/Talk:Kevin_Bacon
最近我的一个朋友,在工作中遇到了一个类似于维基百科抓取的项目,提到他写了一个非常强大的过滤功能,拥有超过100行代码来确定一个维基百科的内部链路是否链接到一个文章页面。不幸的是,他没有在尝试找到文章链接和非文章链接之前花更多的时间,否则他可能发现了这个窍门。如果你检查链接点到该文章页(相对于其他内部页),他们有三个相同的地方:
①他们都在div之中而且id是bodyContent
②这个URLs都不包含分号
③这些URLs都以/wiki/开始
我们可以利用这些规则小幅度的修改代码来检索仅需要的文章链接:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(&http://en.wikipedia.org/wiki/Kevin_Bacon&)
bsObj = BeautifulSoup(html)
for link in bsObj.find(&div&, {&id&:&bodyContent&}).findAll(&a&,
href = re.compile(&^(/wiki/)((?!:).)*$&)):
if 'href' in link.attrs:
print(link.attrs['href'])
如果你运行这个,你可以看到维基百科中所有关于凯文的文章的URL列表。当然,有一个寻找文章连接并且锁死的维基百科文章的的脚本虽然很有趣,但是并没有什么用。我们需要用借此代码把它转化成下面这些条件的东西:
①一个单一功能的函数,getLinks,它获取由/wiki/&Article_Name&组成的文章URL,并且列表形式返回所有的文章URL。
②一个主要调用getLinks的开始文章的函数,从返回列表中随机选择文章链接,并且继续调用getLinks,直到我们程序停止或者在新的页面中没有找到新的文章链接。
这里是完成这个的完整代码:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
random.seed(datetime.datetime.now())
def getLinks(articleUrl):
html = urlopen(&http://en.wikipedia.org&+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find(&div&, {&id&:&bodyContent&}).findAll(&a&,
pile(&^(/wiki/)((?!).)*&&))
links = getLinks(&/wiki/Kevin_Bacon&)
while len(links) & 0:
newArticle = links[random.ranint(0, len(links)-1)].attrs[&href&]
print(newArticle)
links = getLinks(newArticle)
这个程序做的第一件事情就是,导入所需要的库,设定随机数生成器种子为当前系统时间。这个实际上保证了每次程序运行查找维基百科的文章时都有一个新的和有趣的随机路径。
伪随机数和随机种子:

我要回帖

更多关于 getexternalstorage 的文章

 

随机推荐