网页数据抓取(2019独角兽企业重金招聘Python工程师标准(gt)(组图) )
优采云 发布时间: 2021-12-06 03:16网页数据抓取(2019独角兽企业重金招聘Python工程师标准(gt)(组图)
)
2019年独角兽企业重磅Python工程师招聘标准>>>
使用Selenium记录前端渲染数据
这几天打算用程序来抓取网站的下一个数据。具体哪个我就不说了,为了减少体力,省点力气。技术使用Java、Selenium、chromeDriver、系统ubuntu16.04
开始查网站的源码,看到了网站使用的模板方式,
> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get install google-chrome-stable
测试chromeDriver是否正常运行。最初,阿里云ECS安装的是centos6.8系统。安装linux chrome并运行chromeDriver后,遇到各种找不到的库。我一直按照提示安装后,还是有问题。谷歌发现CentOS对chrome的支持不是很好(我没有继续追查原因,如果有懂的朋友希望澄清一下,谢谢),我换成了ubuntu 16.04 ,测试正常
root@iZj6c1imv6wpn7tfmm7nusZ:/work/fantasy# ./chromedriver
Starting ChromeDriver 2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7) on port 9515
Only local connections are allowed.
抓取页面的java代码,并使用chromeDriver进行渲染。您可以正常使用 xpath 来查找 html 元素。基本用法是使用By的搜索方法,可以通过id、class、tag等进行搜索。
这里有几点需要注意
需要设置选项,
准备工作做完了,可以抓数据了。摆脱手动定时查看,需要通知的时候可以使用bearychat向自己或团队发送通知,做一个快乐的程序员
java爬取分析代码
private WebDriver webDriver;
public XXXSpider() {
String driver = System.getProperty("webdriver.chrome.driver");
if (driver == null) {
logger.info("没有设置 driver 变量");
System.getProperties().setProperty("webdriver.chrome.driver", "/Users/chengpanwang/Downloads/chromedriver");
} else {
logger.info("driver: {}", driver);
}
}
public BigDecimal pageDetail(String url) {
logger.info("详情页: {}", url);
........
try {
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--no-sandbox");
webDriver = new ChromeDriver(options);
webDriver.get(url);
WebElement webElement = webDriver.findElement(By.xpath("/html"));
WebElement roleSkill = webElement.findElement(By.id("role_skill"));
logger.info(roleSkill.getText());
logger.info("选中技术标签");
roleSkill.click();
WebElement skillTb = webElement.findElement(By.className("skillTb"));
for (WebElement item : skillTb.findElements(By.tagName("td"))) {
String level = item.findElement(By.tagName("p")).getText();
String h5 = item.findElement(By.tagName("h5")).getText();
.... 具体业务代码
}
webDriver.close();
} catch (Exception e) {
logger.error("", e);
}
return price;
}