解决办法:我们如果在NovelMapper中加上注解@Repository,红线便会消失,@Repository与@Service、@Compent、@Controller的作用差不多,都是声明作用,取不同的名字只是为了更好的区分各自的功能,为的是Spring可以@Autowired是正常注入。但其实这个场景下,@Repository不添加,Mapper接口也会被正常注入,这是因为我们@MapperScan中已经指定了mapper的目录,IDEA只是红线进行警告
<!--数据源库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 数据库连接的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!--mybatis的orm插件-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>${mybatisplus.spring.boot.version}</version>
</dependency>
WebMagic支持以XPath获取页面元素
@ExtractByUrl
private String url;//小说的url
@ExtractBy("//*[@id=\"info\"]/p[4]/text()")
private String update;
@ExtractBy("//*[@id=\"fmimg\"]/img/@src")
private String imgurl;
@ExtractBy("//div[@class='listmain']/dl/dd/a/text()")
样式大概就这几种,属性通过@src之类来指定,@ExtractByUrl即扒取当前页面的Url
指定网页时可通过正则表达式来指定
@TargetUrl(value = "https://www.sbiquge.com/[0-9_]+",sourceRegion = "//div[@class='bookimg']/a")
@HelpUrl("https://www.sbiquge.com/s.php")
public class Novel {
sourceRegion属性为指定扒取网页的指定区域,HelpUrl指定的是列表页面,Target指定的是文章内容页
内容保存,pipeline阶段可以直接写入数据库
@Component("chapterItemPipeline")
public class ChapterItemPipeline implements PageModelPipeline<Chapter> {
@Autowired
ChapterMapper chapterMapper;
@Override
public void process(Chapter chapter, Task task) {
chapterMapper.insert(chapter);
}
}