通常我们都会有一个css-reset初始化所有html的margin:0padding:0的公共样式文件。当margin:0或者padding:0时,如果我们没有设置list-style-position为inside的时候就会出现这种情况。
解决办法:设置 list-style: square inside。或者给 ul 增加margin或者padding的left边距。
1.</?font[^><]*>这个只却掉font标签的, 保留除font以外的所有标签, 如<img><p>等等. 同样的你需要去掉其他标签, 只需要将里面的font换你要去掉的;
2.</?[^/?(img)|(p)][^><]*>这个保留(这里我写的保留了img, p这两个标签)你指定的标签,其他的(包括font)全去掉, 如果你还有其他的标签想保留, 直接在里面加一个 |(xxx);
3.</?[a-zA-Z]+[^><]*>这个表达式可以去掉所有HTML的标签;
4.JAVA代码可以这样写:
public static String delTagsFContent(String content){
String patternTag = "</?[a-zA-Z]+[^><]*>"
String patternBlank = "(^\\s*)|(\\s*$)"
return content.replaceAll(patternTag, "").replaceAll(patternBlank, "")
}
清除所有默认样式的css代码:
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
初始化代码(清除CSS代码):
ul,li{ padding:0margin:0list-style:none}
解析清除ul li样式代码:
相等于分别对ul和li设置padding:0margin:0list-style:none;
padding:0 —— 设置内补白(对象内间距)为0
margin:0 —— 设置对象外间距为0
list-style:none —— 去除自带无序圆点
HTML/javascript
引用外部文件中的js脚本,
<script type="text/javascript" src="ext.js"></script>也可以象下面这样写,language不是必要的,但是推荐上面的写法;
<script language="javascript" type="text/javascript" src="ext.js"></script>
页面内引用:
<script type="text/javascript">//<![CDATA[var x = 0function fn(args) { //...} //]]></script>加上“//<![CDATA[” 和 “//]]>”是为了兼容XHTML,是推荐的写法,HTML时代一般用“<!--”和“//-->”
在一些HTML控件的事件属性中使用(一般事件为onxxx,如onmouseover,onclick,onchange)
<body onload="alert('loaded')"><input type="text" name="username" onclick="alert(this.value)" />在一些HTML控件的非事件属性中使用(注意:一定要加javascript:)
<a href="javascript:void(0)" onclick="alert(this.innerText)">my blog:http://blog.csdn.net/kimsoft</a>
import cn.edu.hfut.dmic.webcollector.model.CrawlDatumsimport cn.edu.hfut.dmic.webcollector.model.Page
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler
public class TutorialCrawler extends BreadthCrawler {
public TutorialCrawler(String crawlPath, boolean autoParse) {
super(crawlPath, autoParse)
}
/*
可以往next中添加希望后续爬取的任务,任务可以是URL或者CrawlDatum
爬虫不会重复爬取任务,从2.20版之后,爬虫根据CrawlDatum的key去重,而不是URL
因此如果希望重复爬取某个URL,只要将CrawlDatum的key设置为一个历史中不存在的值即可
例如增量爬取,可以使用 爬取时间+URL作为key。
新版本中,可以直接通过 page.select(css选择器)方法来抽取网页中的信息,等价于
page.getDoc().select(css选择器)方法,page.getDoc()获取到的是Jsoup中的
Document对象,细节请参考Jsoup教程
*/
@Override
public void visit(Page page, CrawlDatums next) {
if (page.matchUrl("http://blog.csdn.net/.*/article/details/.*")) {
String title = page.select("div[class=article_title]").first().text()
String author = page.select("div[id=blog_userface]").first().text()
System.out.println("title:" + title + "\tauthor:" + author)
}
}
public static void main(String[] args) throws Exception {
TutorialCrawler crawler = new TutorialCrawler("crawler", true)
crawler.addSeed("http://blog.csdn.net/.*")
crawler.addRegex("http://blog.csdn.net/.*/article/details/.*")
/*可以设置每个线程visit的间隔,这里是毫秒*/
//crawler.setVisitInterval(1000)
/*可以设置http请求重试的间隔,这里是毫秒*/
//crawler.setRetryInterval(1000)
crawler.setThreads(30)
crawler.start(2)
}
}