通过观察分析可以看到,每一个网页除了调用pager的网页之外,下拉加载的地址为http://www.360che.com/ajaxpage/ArticleCategory2014/ArticleCategory2014Ajax.aspx?c=1&p=2。第一页加载2、3,第二页加载5、6,第三页加载8、9。 我们将最后的数字改为1、4、7时,可以发现返回结果中的新闻内容与pager相对应。
此时我们可以确认通过访问 http://www.360che.com/ajaxpage/ArticleCategory2014/ArticleCategory2014Ajax.aspx?c=1&p=1,改变最后一位的数字,就可以访问到全部的新闻内容。
确定了如何遍历网页内容后,我们需要确定如何结束循环遍历。通常的网站,当我们访问一个较大的或者不存在的链接时,会返回错误,今天的目标网站不一样,我们将最后一个数字改成10000.可以看到还是有返回结果。当把数字改成20000时,也是有返回结果的。不过,仔细观察两次的返回结果,可以发现这两次的返回结果都是一样的。所以我们结束的判断为当前接口返回的内容和上一次调用接口返回的内容一致,就结束访问。
找到了开始和结束的确认方式,我们再在当前的基础上增加将新闻url存储到redis数据库的过程,方便通过scrapy-redis进行新闻网页的下载。
部分代码
以下是主端代码。
import requests
from bs4 import BeautifulSoup
import redis
class Item():
def __init__(self,title,url,time,auth):
self.title = title