I need to create a html parser, that given a blog url, it returns a list, with all the posts in the page.
- I.e. if a page has 10 posts, it
should return a list of 10 divs,
where each div contains h1 and
a p
I can’t use its rss feed, because I need to know exactly how it looks like for the user, if it has any ad, image etc and in contrast some blogs have just a summary of its content and the feed has it all, and vice-versa.
Anyway, I’ve made one that download its feed, and search the html for similar content, it works very well for some blogs, but not for others.
I don’t think I can make a parser that works for 100% of the blogs it parses, but I want to make the best possible.
What should be the best approach? Look for tags that have its id attribute equal “post”, “content”? Look for p tags? etc etc etc…
Thanks in advance for any help!
“Best possible” turns out to be “best reasonable,” and you get to define what is reasonable. You can get a very large number of blogs by looking at how common blogging tools (WordPress, LiveJournal, etc.) generate their pages, and code specially for each one.
The general case turns out to be a very hard problem because every blogging tool has its own format. You might be able to infer things using “standard” identifiers like “post”, “content”, etc., but it’s doubtful.
You’ll also have difficulty with ads. A lot of ads are generated with JavaScript. So downloading the page will give you just the JavaScript code rather than the HTML that gets generated. If you really want to identify the ads, you’ll have to identify the JavaScript code that generates them. Or, your program will have to execute the JavaScript to create the final DOM. And then you’re faced with a problem similar to that above: figuring out if some particular bit of HTML is an ad.
There are heuristic methods that are somewhat successful. Check out Identifying a Page's Primary Content for answers to a similar question.